iOS有模仿物理环境的动态动画,今天就简单的给视图添加重力效果和碰撞效果
首先使用一个参考视图也可以理解为背景视图创建自动动画:
dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
并且我们创建两个一大一小的视图:
litterView = createGlobe(CGRectMake(145, 20, 50, 50), color: UIColor.yellowColor())
hugeView = createGlobe(CGRectMake(120, 300, 100, 100), color: UIColor.redColor())
self.view.addSubview(litterView!)
self.view.addSubview(hugeView!)
func createGlobe(frame:CGRect,color:UIColor) -> UIView{
let view = UIView (frame: frame)
view.backgroundColor = color
view.layer.borderColor = UIColor.greenColor().CGColor
view.layer.cornerRadius = frame.size.width/2
view.layer.masksToBounds = true
view.layer.borderWidth = 2
return view
}
然后我们给小的视图添加重力行为并设置加速度:
//重力行为
let gravite = UIGravityBehavior(items: [litterView!])
//加速度
gravite.magnitude = 5
给大视图和小视图都添加碰撞行为
//碰撞行为
let collisionBehavior = UICollisionBehavior(items: [litterView!,hugeView!])
//用参考视图边界作为碰撞边界
collisionBehavior.translatesReferenceBoundsIntoBoundary = true
collisionBehavior.collisionDelegate = self
碰撞行为是有代理方法的,我们可以通过实现代理方法监听碰撞过程:
两个视图碰撞结束:
func collisionBehavior(behavior: UICol