自学Swift-斯坦福笔记整理(十二) Physics based Dynamic Animation

来源:互联网 发布:淘宝网舞蹈水袖 编辑:程序博客网 时间:2024/04/28 23:41
步骤
1:需要一个UIDynamicAnimator //这是驱动这些物理动画效果的本源
创建对象后添加UIDynamicBehaviors 重力等属性
UIDynamicItems将会受其他对象的重力,碰撞或者其他效果
CODE:
var animator = UIDynamicAnimator(referenceView: UIView)
创建行为:
let gravity = UIGravityBehavior()
animator.addBehavior(gravity)
collider = UICollisionBehavior()
animator.addBehavior(collider)
let item1: UIDynamicItem = 
let item2: UIDynamicItem = 
//item1添加了重力和碰撞 item2会受重力影响但是不受碰撞效果印象
gravity.addItem(item1)
collider.addItem(item1)
gravity.addItem(item2)

UIDynamicItem protocol
protocol UIDynamicItem {
     var bounds: CGRect{get} //只读 动画器无法改变一个东西的大小
     var center: CGPoint{get set}  //位置
     var transform: CGAffineTransform{get set} //用于旋转
}

func updateItemUsingCurrentState(item: UIDynamiaItem)

UIGravityBehavior //重力属性
var angle: CGFloat//角度
var magnitude: CGFloat.//加速度

//附属行为的动画效果
UIAttachmentBehavior
init(item: UIDynamicItem, attachedToAnchor: CGPoint)
init(item: UIDynamicItem, attachedToItem: UIDynamicItem)
init(item: UIDynamicItem, offsetFromCenter: CGpPoint,attachedToItemAnchor…)
var length: CGFloat
var anchorPoint: CGPoint

UICollisionBehavior
var collisionMode: UICollisionBehaviorMode

func addBoundaryWithIdentifier(identifier: NSCopping,forPath: UIBezierPath)
func removeBoundaryWithIdentifier(identifier: NSCopying)
var translatesReferenceBoundsIntoBoundary: Bool //为true动画对象的所有的外边框,就会变成一个边界
//当触碰到一个边界的时候,会得到这个消息
var collisionDelegate: UICollisionBehaviorDelegate
function collisionBehavior(behavior: UICollisionBehavior,began/endedContactForItem: UIDynamicItem,withBoundaryIdentifierNSCopying)

UISnapBehavior //当物体移动到某个point处,,发生碰撞 然后震荡
init(item: UIDynamicItem,snapToPoint: CGPoint)
var damping: CGFloat //控制震荡大小

UIPushBehavior //代表的意思是,把这个东西推向一个特定的角度或者是一个力度,有点类似于重力 与重力不同是Push行为可以是一个一次性的效果 也可以是一个持续性,连续的效果 不像重力可以加速
var mode: UIPushBehaviorMode
var pushDirection: CGVector
var angle: CGFloat
var magnitude: CGFloat 

UIDynamicItemBehavior  //动态对象行为
var allowsRotation: Bool
var friction: CGFloat
var elasticity: CGFloat
//线性速度 
func linearVelocityForItem(UIDynamicItem) -> CGPoint
func addLinearVelocity(CGPoint,forItem:UIDynamicItem)
//角速度
func angularVelocityForItem(UIDynamicItem) -> CGFloat

//这个是所有行为的父类
UIDynamicBehavior
func addChildBehavior(UIDynamicBehavior)

所有的行为一次只能在一个动画器中
var dynamicAnimator: UIDynamicAnimator{gets] //可以询问一个碰撞行为谁正在进行动画效果
func willMoveToAnimator(UIDynamicAnimator)

UIDynamicBehavior中重要的属性 action
var action: (() -> Void)? //99.9999%的情况下,它通过一个闭包来设值 
每次这个行为发生在其对象上的时候这段代码都会执行

Stasis
var delegate: UIDynamicAnimatorDelegate

func dynamicAnimatorDidPause(UIDynamicAnimator)
func dynamicAnimatorWillResume(UIDynamicAnimator))
0 0
原创粉丝点击