UIKit - Dynamics

UIKit动力学的引入,并不是以替代CA或者UIView动画为目的的,在绝大多数情况下CA或者UIView动画仍然是最优方案,只有在需要引入逼真的交互设计的时候,才需要使用UIKit动力学它是作为现有交互设计和实现的一种补充而存在的。

三个比较重要的对象

  • UIDynamicItem:用来描述一个力学物体的状态,其实就是实现了UIDynamicItem委托的对象,或者抽象为有面积有旋转的质点 (所有的 UI 对象都实现了这个协议), 说白了就是执行物理仿真效果的 view ;

  • UIDynamicBehavior:动力行为的描述,用来指定UIDynamicItem应该如何运动,即定义适用的物理规则。一般我们使用这个类的子类对象来对一组UIDynamicItem应该遵守的行为规则进行描述;

  • UIDynamicAnimator:动画的播放者(管理者),动力行为(UIDynamicBehavior)的容器,添加到容器内的行为将发挥作用;

    • UIDynamicAnimator 的 ReferenceView:等同于力学参考系,如果你的初中物理不是语文老师教的话,我想你知道这是啥..只有当想要添加力学的UIView是ReferenceView的子view时,动力UI才发生作用。
    UIKit - Dynamics_第1张图片
    基本的体系结构图

** UIDynamicBehavior**

  • UIAttachmentBehavior:附着行为。处理是 item 和 锚点,item 和 item 之间的吸附关系。item 和 锚点,item 和 item 之间就像一根木头杆子一样连接。
  • UICollisionBehavior:碰撞行为。 处理是 item 和 item 之间,item 和碰撞边界之间的关系。
  • UIDynamicItemBehavior:动力元素
  • UIFieldBehavior:(iOS9 新加的)
  • UIGravityBehavior:重力行为。 更具指定的重力方向进行自由落体运动。
  • UIPushBehavior:推动行为。给item 一个持续或瞬间的力。
  • UISnapBehavior:捕获行为。 item 会运动到某个固定的 point 。在运动到 point 过程中会产生动画效果。

Dynamic 简单使用的三部曲

  • 创建 DynamicAnimator
  • 创建 DynamicBehavior 并将 DynamicBehavior 添加到 DynamicAnimator 中。
  • 创建 UIDynamicItem 并将 UIDynamicItem 添加到 DynamicBehavior 中。
    在实际的写代码过程是反过来的
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIDynamicAnimator *animator;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1. 创建要进行物理仿真的 item
    UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
    aView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:aView];
    
    // 2. 创建 item 要执行的物理仿真行为
    /*
     1. 将 item 和 物理仿真行为进行关联。
     */
    UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[aView]];
    
    // 3. 创建物理仿真动画的管理者 animator
    /*
     1. referenceView 主要是用来提供一个 Behavior 执行参照的坐标系
     2. beahvior 将物理仿真行为和动画管理者进行关联
     */
    UIDynamicAnimator* animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    [animator addBehavior:gravityBeahvior];
    
    // 由于动画的执行是需要时间的, 对动画管理者进行引用避免动画管理者销毁。
    self.animator = animator;
}
@end
UIKit - Dynamics_第2张图片
1.gif

注意点:

学习的博客地址

WWDC 2013 Session笔记 - UIKit Dynamics入门
UIKit Dynamics 教程:抛掷 Views

你可能感兴趣的:(UIKit - Dynamics)