UI Dynamics是UIKit的一个新组成部分,它向iOS中的仕途提供了与物理学有关的功能和动画。
在界面中实现一个view(球)的重力下落和碰撞
在界面中实现一个view的下落和碰撞,首先,要想实现这些物理因素的效果,要有一个来实现效果的东西——UIDynamicAnimator,直接上代码了:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var ball: UIView! // xib拖出来的一个view,是个球
var dynamicAnimator: UIDynamicAnimator! // 控制器中有一个dynamicAnimator,用来作为物理因素的执行者
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ball.layer.cornerRadius = 50.0 // 把view做成一个球(强迫症)
// 初始化这个animator,初始化的时候用的是一个关联的view
// 这里用的是所有控件的父view,这个父view我的理解是执行所有物理因素动画的所有者和执行者
dynamicAnimator = UIDynamicAnimator.init(referenceView: self.view)
// 为ball设置一个重力的行为,并且添加到animator中去
let gravityBehavior = UIGravityBehavior.init(items: [self.ball])
dynamicAnimator.addBehavior(gravityBehavior)
// 为ball添加一个碰撞的行为,也添加到animator中去
let collisionBehavior = UICollisionBehavior.init(items: [self.ball])
collisionBehavior.translatesReferenceBoundsIntoBoundary = true // 设定边界在这个碰撞行为相关的坐标系中是生效的
dynamicAnimator.addBehavior(collisionBehavior)
}
}
吸附UI
这个也是个behavior,跟重力那些一样,可以让界面元素吸附到某一个点去
// 这个可以在比如点击手势的时候,让一个指定的界面元素移动到那个位置之类的情况
let snap = UISnapBehavior.init(item: self.ball , snapTo: aPoint )
dynamicAnimator.addBehavior(snap)
网友评论