1. SB放上俩 imageview,拖线成类属性
import UIKit class ViewController: UIViewController { @IBOutlet weak var box2: UIImageView! @IBOutlet weak var box1: UIImageView! //1.s创建仿真器 private lazy var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: self.view) override func viewDidLoad() { super.viewDidLoad() //设置背景颜色图 view.backgroundColor = UIColor(patternImage: UIImage.init(named: "background") ?? UIImage()) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { let point = touches.first?.location(in: view) snap(point: point ?? CGPoint.zero) gravity() collision() push() } ///重力 func gravity() { //2.创建仿真行为 let behavior = UIGravityBehavior(items: [box1]) //重力方向,重力的力度 // behavior.gravityDirection = CGVector(dx: 10, dy: -10) // //角度 // behavior.angle = -CGFloat.pi // // //量级:速度 // behavior.magnitude = 5 //设置角度和量级 behavior.setAngle( CGFloat.pi/2, magnitude: 5) //3. 仿真器添加仿真行为 animator.addBehavior(behavior) } /// 碰撞 func collision() { //2.创建仿真行为 let behavior = UICollisionBehavior(items: [box1, box2]) //添加碰撞边界: view的bounds behavior.translatesReferenceBoundsIntoBoundary = true // items: 只碰撞元素 // boundaries:只碰撞边界 // everything:任何东西 //碰撞模式 behavior.collisionMode = UICollisionBehavior.Mode.everything //设置边界的内边距 // behavior.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)) let str : NSString = "123" // NSString 遵循NSCopying let str1 : String = "123" //String 没有遵循NSCopying //添加一个边界 // behavior.addBoundary(withIdentifier: str, from: CGPoint(x: 0, y: 500), to: CGPoint(x: view.frame.size.width, y: 300)) //设置代理 behavior.collisionDelegate = self //3. 仿真器添加仿真行为 animator.addBehavior(behavior) } /// 创建捕捉行为 func snap(point:CGPoint){ //FIXME:如果想要多次执行p捕捉行为,必须先移除添加捕捉行为 animator.removeAllBehaviors() let behavior = UISnapBehavior(item: box2, snapTo: point) //动画流畅度 behavior.damping = 1 animator.addBehavior(behavior) } func push(){ // continuous:一直推 // instantaneous:推一次 //1.创建推行为 let behavior = UIPushBehavior(items: [box1], mode: UIPushBehavior.Mode.instantaneous) //设置方向 behavior.pushDirection = CGVector(dx: 0, dy: -8) //2. 仿真器添加仿真行为 animator.addBehavior(behavior) } } extension ViewController:UICollisionBehaviorDelegate{ func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item1: UIDynamicItem, with item2: UIDynamicItem, at p: CGPoint){ print("开始碰撞 元素 - 元素", p) } func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item1: UIDynamicItem, with item2: UIDynamicItem){ print("结束碰撞 元素 - 元素") } func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?, at p: CGPoint){ print("开始碰撞 元素 - 边界", p) } func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?){ print("结束碰撞 元素 - 边界") } }