一、UIKit Dynamics简介
UIkit Dynamics是从iOS 7开始支持的,其实就是UIKit的一套动画和交互体系。我们现在进行的UI动画基本都是使用CoreAnimation或者UIView animations。让UIView视图能够模拟逼真的现实世界的逼真物理行为效果,实现诸如物理在重力下落或者两个物体碰撞的逼真效果,本质上这是苹果开发的一个简单的动画物理引擎,使得APP操作起来更加真实,相对于一些更加专业的游戏物理引擎如unity3D,Dynamics用更加简单的API实现这些动态效果。
UIDynamicItem:用来描述一个力学物体的状态,其实就是实现了UIDynamicItem委托的对象,或者抽象为有面积有旋转的质点;
UIDynamicBehavior:动力行为的描述,用来指定UIDynamicItem应该如何运动,即定义适用的物理规则。一般我们使用这个类的子类对象来对一组UIDynamicItem应该遵守的行为规则进行描述;
UIDynamicAnimator:动画的播放者,动力行为(UIDynamicBehavior)的容器,添加到容器内的行为将发挥作用;
ReferenceView:等同于力学参考系,如果你的初中物理不是语文老师教的话,我想你知道这是啥..只有当想要添加力学的UIView是ReferenceView的子view时,动力UI才发生作用。
二、UIkit DynamicsAPI的开发逻辑是:
1.首先创建基于一个参考视图的力学生成器UIDynamicAnimator对象;
2.创建要发生物理作用的视图的UIDynamicBehavior子类的各种行为对象(总共有重力行为UIGravityBehavior,碰撞UICollisionBehavior,连接与弹簧行为UIAttachmentBehavior,吸附行为UISnapBehavior,推力行为UIPushBehavior和物体属性UIDynamicItemBehavior六类),并设置行为对象的属性参数;
3.将行为对象添加到力学生成器。
三、UIKit Dynamics示例使用
重力行为:让一个物体视图在重力作用下下落或者在广义的力下往任意方向运动。
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
aView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:aView];
//1
UIDynamicAnimator* animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
//2
UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[aView]];
//3
[animator addBehavior:gravityBeahvior];
self.animator = animator;
}
首先以控制器的视图self.view作为参考系创建力学生成器;然后创建重力行为,此重力行为用一个数组对象初始化,这个数组对象的成员即为需要添加重力行为的物体对象;除此,可以设置重力行为的作用力方向向量,这决定物体的运动方向及运动快慢;最后将行为添加至力学生成器。