第六课——UIDynamicAnimator

今天我们要学习UIDynamicAnimator 仿真物理学 。

UIKit 力学(Dynamics) 和动态效果(Motion Effects) 。
创建力学基本流程:
  1. 创建运动管理
  2. 创建运动行为(如gravity、collision),运动行为添加运动物体:即需要指定具体物体(具体物体,具体行为)
  3. 当需要使用运动物体的某种行为,就用运动管理添加运动行为
  4. 一般还要注意remove
完整代码:

import UIKit

class ViewController: UIViewController {

    var animator: UIDynamicAnimator?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        //下落的方块

        let square = UIView(frame: CGRect(x: 120, y: 50, 80, height: 80))

        square.backgroundColor = UIColor.cyan

        self.view.addSubview(square)

        //边界:栏杆

        let barrier = UIView(frame: CGRect(x: 0, y: 350, 140, height: 25))

        barrier.backgroundColor = UIColor.red

        self.view.addSubview(barrier)

        

        

        //创建运动管理

        animator = UIDynamicAnimator(referenceView: self.view)

        //创建运动行为:gravity、collision——>需要指定具体物体(具体物体,具体行为)

        let gravity = UIGravityBehavior(items: [square])

        let collision = UICollisionBehavior(items: [square])

        let elastic = UIDynamicItemBehavior(items: [square])

        //添加边界(不可见)——而不是barrier(它只是给人以视觉上的边界)

        let right = CGPoint(x: barrier.frame.origin.x + barrier.frame.size.width, y: barrier.frame.origin.y)    //而left是barrier.frame.orign,这两个都是CGPoint,就只有x和y属性

        //将参考视图(父视图)的边界作为碰撞边界

        collision.translatesReferenceBoundsIntoBoundary = true

        //将barrier作为碰撞边界

        collision.addBoundary(withIdentifier: "aa" as NSCopying, from: barrier.frame.origin, to: right)

        //实现弹性效果

        elastic.elasticity = 1.12

        

        

        animator?.addBehavior(gravity)

        animator?.addBehavior(collision)

        animator?.addBehavior(elastic)

    }

  

}

原文地址:https://www.cnblogs.com/quanxi/p/6115331.html