基礎(chǔ)知識(shí)
UIDynamic是物理仿真動(dòng)畫,使用前先了解三個(gè)類:
物理仿真元素(Dynamic Item):要執(zhí)行動(dòng)畫的元素,需要遵守UIDynamicItem協(xié)議,對(duì)于UIView我們直接使用即可,它已經(jīng)遵守了.
物理仿真行為(Dynamic Behavior):要執(zhí)行的仿真行為,例如仿重力下降,仿物體碰到障礙物,目前提供的仿真行為有: UIGravityBehavior(重力行為),UICollisionBehavior(碰撞行為),UISnapBehavior(捕捉行為),UIPushBehavior(推動(dòng)行為),UIAttachmentBehavior(附著行為),UIDynamicItemBehavior(動(dòng)力元素行為).
物理仿真器(Dynamic Animator): UIDynamicAnimator,讓仿真元素執(zhí)行仿真動(dòng)畫.
應(yīng)用
實(shí)現(xiàn)重力和碰撞的仿真行為動(dòng)畫
class ViewController: UIViewController, UIDynamicAnimatorDelegate { var dynamicAnimator = UIDynamicAnimator() //物理仿真器 var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() self.imageView = UIImageView(frame: CGRect.init(x: 50, y: 350, width: 100, height: 100)) self.imageView.backgroundColor = UIColor.red self.imageView.layer.cornerRadius = 50 self.imageView.layer.masksToBounds = true self.view.addSubview(self.imageView) }
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
dynamicAnimator.delegate = self
let itemBehavior = UIDynamicItemBehavior(items: [self.imageView])
itemBehavior.elasticity = 0.5
dynamicAnimator.addBehavior(itemBehavior)
//創(chuàng)建并添加重力行為
let gravityBehavior = UIGravityBehavior(items: [self.imageView])
gravityBehavior.magnitude = 1
//下降的角度
gravityBehavior.angle = 45
dynamicAnimator.addBehavior(gravityBehavior)
//創(chuàng)建并添加碰撞行為
let collisionBehavior = UICollisionBehavior(items: [self.imageView])
collisionBehavior.translatesReferenceBoundsIntoBoundary = true
collisionBehavior.collisionMode = .everything
dynamicAnimator.addBehavior(collisionBehavior)
}
//監(jiān)聽動(dòng)畫結(jié)束
func dynamicAnimatorDidPause(_ animator: UIDynamicAnimator) {
self.imageView.frame = CGRect.init(x: 50, y: 350, width: 100, height: 100)
}
}
`