UIKit Dynamics--iOS7
Dynamic Items 简介
Apple Library相关的 UIKit Dynamics 的焦点都是关于 items 之间相互的作用及其动画。有一个要求,为了在一个 item 上使用 dynamic behavior,item必须满足 UIDynamicItem
协议。该协议定义了三个重要的属性,bounds
,center
,transform
。bounds
属性是readonly的,center
,transform
属性是read/write的,center
需要更新动画的进度,transform
属性返回一个 CGAffineTransform
的对象。
从 iOS7 开始,默认的只有 UIView
和 UICollectionViewLayoutAttributes
类可实现该协议。但是,仍然可以自己创建类去实现之。
@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;
当时想要让一个球能够一开始就有方向有速度的运动,以下两个函数不能再赞,很简便。
– addAngularVelocity(CGFloat):forItem(id[UIDynamicItem]) //设置角速度
– addLinearVelocity(CGPoint):forItem(id[UIDynamicItem]) //设置线速度
UIDynamicAnimator
UIDynamicBehavior
需要添加到 animator
上才能发生作用;
ReferenceView
等同于力学参考系。