繁体   English   中英

动态创建的UIView在碰撞后不会动画

[英]Dynamically Created UIView Will Not Animate After Collision

感谢您阅读这篇文章。

这是我的程序的摘要:

  1. 我动态地将几个UIViews添加为子视图。

  2. 我的物体会四处移动并发生碰撞

  3. 发生碰撞时,我希望其中一个创建的UIView淡出,然后我要删除其中一个碰撞的UIView。

我可以使用以下dynamicAnimator?.referenceView?.viewWithTag(tagOfView)?.removeFromSuperview()删除创建的UIView: dynamicAnimator?.referenceView?.viewWithTag(tagOfView)?.removeFromSuperview()

但是,当我尝试添加动画以淡化视图时,没有得到任何类型的淡入/动画。 我做错了什么?

UIView.animateWithDuration(1.5, animations: {
    self.dynamicAnimator?.referenceView?.viewWithTag(tagOfView)?.alpha = 0.0 
})

在需要的情况下,这里是整个collisionBehavior()函数。

func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying, atPoint p: CGPoint) {
    let identOpt : NSCopying? = identifier

    if let ident = identOpt as? NSNumber {
        switch ident {
        case Identifiers.paddleAtStartup:
            break
        default:
            ballCollider.removeBoundaryWithIdentifier(ident)
            UIView.animateWithDuration(1.5, animations: {
                self.dynamicAnimator?.referenceView?.viewWithTag(Int(ident))?.alpha = 0.0
                })
            dynamicAnimator?.referenceView?.viewWithTag(Int(ident))?.removeFromSuperview()       
        }
    }
}

碰撞后立即删除视图,没有任何动画。 您最好在动画的完成处理程序中将其删除。

以下是针对存在相同问题的任何人的更正代码:

 func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying, atPoint p: CGPoint) {
    let identOpt : NSCopying? = identifier

    if let ident = identOpt as? NSNumber {
        switch ident {
        case Identifiers.paddleAtStartup:
            break
        default:
            UIView.animateWithDuration(0.1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { ()
                self.dynamicAnimator?.referenceView?.viewWithTag(Int(ident))?.alpha = 0.0
                }, completion: {
                    if $0 {
                        self.dynamicAnimator?.referenceView?.viewWithTag(Int(ident))?.removeFromSuperview()
                        self.ballCollider.removeBoundaryWithIdentifier(ident)
                    }
            })
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM