[英]Dynamically Created UIView Will Not Animate After Collision
感谢您阅读这篇文章。
这是我的程序的摘要:
我动态地将几个UIViews添加为子视图。
我的物体会四处移动并发生碰撞
发生碰撞时,我希望其中一个创建的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.