什么是UIDynamic
UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架
可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象
重力、弹性碰撞等现象
物理引擎的价值
广泛用于游戏开发,经典成功案例是“愤怒的小鸟”
让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果
提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏
知名的2D物理引擎
Box2d
Chipmunk
使用步骤
要想使用UIDynamic来实现物理仿真效果,大致的步骤如下
1.创建一个物理仿真器(顺便设置仿真范围)
2.创建相应的物理仿真行为(顺便添加物理仿真元素)
- 将物理仿真行为添加到物理仿真器中 -> 开始仿真
重力
//1. 创建仿真器
let animator = {
return UIDynamicAnimator(referenceView: view)
}()
//2.创建仿真行为
let behavior = UIGravityBehavior(items: [box1])
//设置重力的方向和速度
behavior.gravityDirection = CGVector(dx: 2, dy: 15)
//0表示右侧
behavior.angle = 3.15 / 2
behavior.magnitude = 5
//将仿真行为添加到仿真器里面
animator?.addBehavior(behavior)
碰撞
//1. 创建仿真器
let animator = {
return UIDynamicAnimator(referenceView: view)
}()
// 2.创建物理仿真行为
let behavior = UICollisionBehavior(items: [box1, box2])
//把参照试图的bounds当作边界
behavior.translatesReferenceBoundsIntoBoundary = true
// 碰撞模式
// Items 只碰撞元素
// Boundaries 自碰撞边界
// Everything: 啥玩意都碰撞
behavior.collisionMode = UICollisionBehavior.Mode.everything
//设置碰撞的那边界
behavior.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0))
let identifier : NSString = "bianjie"
behavior.addBoundary(withIdentifier: identifier, from: CGPoint(x: 0, y: 300), to: CGPoint(x: 150, y: 300))
//添加碰撞的代理 监听碰撞的状态
behavior.collisionDelegate = self
animator?.addBehavior(behavior)
//推
//1. 创建仿真器
let animator = {
return UIDynamicAnimator(referenceView: view)
}()
//2.创建仿真行为
let behavior = UIPushBehavior(items: [box2], mode: UIPushBehavior.Mode.instantaneous)
//设置推的方向
behavior.pushDirection = CGVector(dx: 0, dy: -6)
//3 添加仿真行为
animator?.addBehavior(behavior)
//捕获
//1. 创建仿真器
let animator = {
return UIDynamicAnimator(referenceView: view)
}()
/创建仿真行为
let behavior = UISnapBehavior(item: box1, snapTo: location);
//越大捕获时的振幅越大
behavior.damping = 5
//添加行为
animator?.addBehavior(behavior)
网友评论