UIDynamicAnimator UIKit动力学

也许是工作上并没有这方面的需要,对UIDynamicAnimator的了解不多。这里做简单的介绍;

UIKit动力学是模拟真实世界的一些特性,主要就是UIDynamicAnimator类,通过类中的不同行为实现一些动态特性;

1、初始化


UIDynamicAnimator有两种初始化方式;

 let  animator = UIDynamicAnimator(referenceView: self.view)

 self.view表示一个参照试图,用来规定物理仿真的范围

 animator = UIDynamicAnimator.init(collectionViewLayout: <#T##UICollectionViewLayout#>)

 不是任何对象都能做物理仿真,能够进行物理仿真的元素需要遵守UIDynamicItem协议,UIView遵守了该协议,所以任何UI控件都能进行物理仿真。

UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议,所以也可以进行仿真

2、物理仿真行为


UIDynamicAnimator有以下几种物理仿真行为:

UIGravityBehavior:重力行为

UICollisionBehavior:碰撞行为

UISnapBehavior:捕捉行为

UIPushBehavior:推动行为

UIAttachmentBehavior:附着行为

UIDynamicItemBehavior:动力元素行为

将物理仿真行为添加到仿真器上开始进行仿真操作;


3、UIDynamicAnimator的常见方法

//添加一个物理行为
animator .addBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)

//移除一个物理行为
animator .removeBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)

//移除全部物理行为
animator .removeAllBehaviors()

4、实际使用(以推动行为为例)

animator.removeAllBehaviors()
let push = UIPushBehavior.init(items: [self.gravity,self.push], mode: UIPushBehaviorMode.instantaneous)
push.magnitude = 1  //推动的量级必须初始化,量级的大小表示推动的速度
animator .addBehavior(push) //控件被推出视图

 再添加一种碰撞行为

collision = UICollisionBehavior.init(items: [self.gravity,self.push])
collision.translatesReferenceBoundsIntoBoundary = true
collision.collisionMode = UICollisionBehaviorMode.everything  //这里模式的选择 大家可以不断的调试来检查   尤其是混合效果 比如如果我把推动的模式写为continuous连绵不断的推动,则混合效果中控件就会贴在参照图的边缘不动
animator .addBehavior(collision)
原文地址:https://www.cnblogs.com/lidarui/p/5996190.html