感谢阅读这篇文章。
以下是我的计划摘要:
我动态添加了几个UIViews作为子视图。
我有移动的物体并碰撞
当发生碰撞时,我希望其中一个已创建的UIViews淡出,然后我想删除其中一个碰撞的UIViews。
我可以使用以下内容删除创建的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()
}
}
}
答案 0 :(得分:1)
您在碰撞后立即删除视图,并且没有动画效果。你最好在动画的完成处理程序中删除它。
答案 1 :(得分:0)
以下是具有相同问题的任何人的更正代码:
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)
}
})
}
}
}