UIKit Dynamics--iOS7

Dynamic Items:

UIDynamicItem Protocol是13年的WWDC新增加的。

Apple Library相关的

UIKit Dynamics的焦点都是关于items之间相互的作用及其动画。有一个要求,为了在一个item上使用dynamic behavior,item必须满足UIDynamicItem协议。该协议定义了三个重要的属性,boundscentertransformbounds属性是readonly的,center,transform属性是read/write的,center需要更新动画的进度,transform属性返回一个CGAffineTransform的对象。

从iOS7开始,默认的只有UIViewUICollectionViewLayoutAttributes类可实现该协议。但是,仍然可以自己创建类去实现之。

1
2
3
@property(nonatomic, readonly) CGRect bounds
@property(nonatomic, readwrite) CGPoint center
@property(nonatomic, readwrite) CGAffineTransform transform

Dynamic Behaviors

在UIKit Dynamics中,一个Dynamic Behavior模拟的是真实世界的物理行为。包含以下六个类:

  • UIAttachmentBehavior
  • UICollisionBehavior
  • UIGravityBehavior
  • UIPushBehavior
  • UISnapBehavior
  • UIDynamicItemBehavior

前五个分别是–附着、碰撞、重力、推力、捕捉。 最后一个不是一个具体的行为,但是也很有用~按我的理解就是可以设置一个物体的本质属性,不依赖于外界而存在的。

最近写代码用到UIDynamicItemBehavior,感觉太棒了!

  • allowsRotation 是否可以旋转;默认YES;
  • density 密度;默认1.0;
  • elasticity 弹性系数;默认0.0;
  • friction 摩擦系数;默认0.0;
  • resistance 阻力;默认0.0;

当时想要让一个球能够一开始就有方向有速度的运动,以下两个函数不能再赞,很简便。

1
2
3
 – addAngularVelocity(CGFloat):forItem(id[UIDynamicItem])//设置角速度
– addLinearVelocity(CGPoint):forItem(id[UIDynamicItem])//设置线速度
//angularResistance角度阻力系数

UIDynamicAnimator

UIDynamicBehavior需要添加到animator上才能发生作用;

ReferenceView

等同于力学参考系。