基本概念:
-
UIDynamic Animator
用于存放要使用的力学行为(UIDynamicBehavior). 它的ReferenceView指向了要呈现的视图。
swift
-
力学行为: 力学行为有6个子类 (添加力学行为:addBehavior
)
UIGravityBehavior
重力
UICollisionBehavior
碰撞
UIAttachmentBehavior
吸附
UIPushBehavior
推
UISnapBhavior
甩
UIDynamicItemBehavior
行为限制
-
力学项目UIDynamicItem
:每个力学行为都有多个力学项目
力学行为特征
下面分别介绍力学行为
重力行为能模拟视图对象收到重力的效果。 根据牛顿定律,物体下落加速度为g
,而在数字世界g = 9.8点/s^2
let animator = UIDynamicAnimator(referenceView: self.view)
let gravity = UIGravityBehavior(items: [])
animator.addBehavior(gravity)
let collison = UICollisionBehavior(items: [])
collison.translatesReferenceBoundsIntoBoundary = true
collison.addBoundaryWithIdentifier(<#T##identifier: NSCopying##NSCopying#>, forPath: <#T##UIBezierPath#>)
collison.addBoundaryWithIdentifier(<#T##identifier: NSCopying##NSCopying#>, fromPoint: <#T##CGPoint#>, toPoint: <#T##CGPoint#>)
吸附行为好像是一个棍子将两个物体连接在一起,两个物体间的距离是刚性的。
UIAttachmentBehavior
的length属性表示两个物体之间的距离,单位是点
。
let attachment = UIAttachmentBehavior(item: , attachedToAnchor: )
可以使视图对象朝着某个方向运动,这个推力有瞬间(UIPushBehaviorModeInstantaneous
) 和 持续(UIPushBehaviorModeContinuous
)
let push = UIPushBehavior(items: [myView], mode: UIPushBehaviorMode.Continuous)
let pushDirection :CGVector = CGVectorMake(0.5, -0.5)
push.pushDirection = pushDirection
push.magnitude = 5.0
push.setAngle(CGFloat(-M_PI/4.0), magnitude: 5.0)
使物体向某个点甩出或抛出, 并且有瞬间加速度,由慢到快,再由快到慢。最后停止在目标点。
var snap = UISnapBehavior(item: myView, snapToPoint: point)
UIDynamicItemBehavior 用来设置力学行为的参数。这些参数包括弹性系数、摩擦系数、阻力和密度等。
(1) density
:密度。如果100x100点的物体,它的密度是1.0,作用力是1.0,那么它的加速度就是100点/s²
(2) elasticity
:弹性系数。范围是0.0~1.0,0表示没有反弹,1.0表示完全弹性碰撞。
(3) friction
:摩擦系数。 0表示没有摩擦,1.0表示摩擦很强。如果要设置更强,可以取值>1.0
(4) resistance
:阻力,物体运动时在线性方向的阻力。0.0是没有阻力,CGFloat_MAX表示最大阻力
(5) allowsRotation
.是否允许旋转
(6) angularResistance
角阻力,物体旋转时旋转方向的阻力。
示例:
var itemBehaviour = UIDynamicItemBehavior(items: [myView])
itemBehaviour.elasticity = 0.5
itemBehaviour.allowsRotation = true
itemBehaviour.friction = 0.0
itemBehaviour.resistance = 0.0
animator.addBehavior(itemBehaviour)