UIKit 动力学与动画布局全解析
1. UICollisionBehavior 与自定义行为
UICollisionBehavior 有一个委托,当发生碰撞时,它会向委托发送消息。我们可以将 self
设置为碰撞行为的委托,当委托消息到达时,为现有的动态项目反弹行为添加旋转速度,使视图开始顺时针旋转。示例代码如下:
func collisionBehavior(_ behavior: UICollisionBehavior,
beganContactFor item: UIDynamicItem,
withBoundaryIdentifier identifier: NSCopying?,
at p: CGPoint) {
// look for the dynamic item behavior
let b = self.anim.behaviors
if let bounce = (b.compactMap {$0 as? UIDynamicItemBehavior}).first {
let v = bounce.angularVelocity(for:item)
if v <= 6 {
bounce.addAngularVelocity(6, for:item)
}
}
}
此时,视图会以抛物线向右下落,撞击地板,顺时针旋转,从地板反弹并继续从屏幕右侧反弹出去。