1.1UIDynamic概述
UIKit动力学(Dynamic)最大的特点是将现实世界中动力驱动的动画引入了UIKit,比如中立,碰撞,推动等效果.即将2D物理引擎引入了UIKit.UIKit动力学的引入,并不是为了替代CA或者UIView动画,在绝大多数情况下CA或者UIView动画仍然是最有方案,只有在需要引入逼真的交互设计时候,才需要使用UIKit动力学他是作为现有交互设计和实现的一种补充.
(一)UIDynamic是什么
UIDynamic是从iOS7.0引入的一种新技术,隶属于UIKit框架,能够模拟现实生活中的物理现象
如:重力,弹性碰撞等现象,是一种物理引擎.
物理引擎的价值:让开发人员在远离物理学公式的情况下,实现炫酷的物理仿真效果.经典案例:愤怒的小鸟.
(二)UIDynamic重要的概念
UIDynamic中的三个重要概念:
1.Dynamic Animator动画者,
2.Dynamic Animator Item动力学元素,
3.Dynamic Behavior仿真行为.
谁(动力学元素) 在哪(由动画者指定区域) 做什么事情(仿真行为).
1.>Dynamic Animator动画者:为动力学元素提供物理学相关的能力及动画,同时为这些元素提供相关的上下文,是动力学院素与底层iOS物理引擎之间的中介,将Behvior对象添加到Animator即可实现动力仿真.(让物理仿真元素在指定的区域执行具体的仿真行为相当于操场
.)
2.>Dynamic Animator Item动力学元素:动力学元素,是任何遵守了UIDynamicItem协议的对象,从iOS7.0开始,UIView和UICollectionViewLayoutAttributes默认实现了该协议.如果自定义的对象实现了该协议,即可通过Dynamic Animator实现物理仿真.(谁要物理仿真?相当于学生
)
3.>UIDynamicBehavior仿真行为:仿真行为,是动力学行为的父类
(执行怎样的物理仿真行为?相当跑步
)
(三)仿真行为分类
- UIGravityBehavior 重力行为
- UICollisionBehavior 碰撞行为
- UISnapBehavior 捕捉行为
- UIPushBehavior 推动行为
- UIAttachmentBehavior 附着行为
- UIDynamicItemBehavior 动力学元素行为
以上所有的行为都是UIDynamicBehavior的子类,所有的行为都可以单独使用,也可以组合多种行为,实现复杂的物理效果.
UIDynamicBehavior常用属性和方法
// 所有子行为
@property (nonatomic, readonly, copy) NSArray<__kindof UIDynamicBehavior *> *childBehaviors;
// When running, the dynamic animator calls the action block on every animation step.
// 用来监听仿真行为(仿真行为每进行一步物理引擎就会调用这个block)
@property (nullable, nonatomic,copy) void (^action)(void);
// 添加一个子行为
- (void)addChildBehavior:(UIDynamicBehavior *)behavior;
// 移除一个子行为
- (void)removeChildBehavior:(UIDynamicBehavior *)behavior;