UI Dynamics是UIKit的一個(gè)新組成部分,它向iOS中的仕途提供了與物理學(xué)有關(guān)的功能和動(dòng)畫(huà)判呕。
在界面中實(shí)現(xiàn)一個(gè)view(球)的重力下落和碰撞
在界面中實(shí)現(xiàn)一個(gè)view的下落和碰撞拥峦,首先,要想實(shí)現(xiàn)這些物理因素的效果,要有一個(gè)來(lái)實(shí)現(xiàn)效果的東西——UIDynamicAnimator晕窑,直接上代碼了:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var ball: UIView! // xib拖出來(lái)的一個(gè)view室叉,是個(gè)球
var dynamicAnimator: UIDynamicAnimator! // 控制器中有一個(gè)dynamicAnimator睹栖,用來(lái)作為物理因素的執(zhí)行者
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ball.layer.cornerRadius = 50.0 // 把view做成一個(gè)球(強(qiáng)迫癥)
// 初始化這個(gè)animator,初始化的時(shí)候用的是一個(gè)關(guān)聯(lián)的view
// 這里用的是所有控件的父view茧痕,這個(gè)父view我的理解是執(zhí)行所有物理因素動(dòng)畫(huà)的所有者和執(zhí)行者
dynamicAnimator = UIDynamicAnimator.init(referenceView: self.view)
// 為ball設(shè)置一個(gè)重力的行為野来,并且添加到animator中去
let gravityBehavior = UIGravityBehavior.init(items: [self.ball])
dynamicAnimator.addBehavior(gravityBehavior)
// 為ball添加一個(gè)碰撞的行為,也添加到animator中去
let collisionBehavior = UICollisionBehavior.init(items: [self.ball])
collisionBehavior.translatesReferenceBoundsIntoBoundary = true // 設(shè)定邊界在這個(gè)碰撞行為相關(guān)的坐標(biāo)系中是生效的
dynamicAnimator.addBehavior(collisionBehavior)
}
}
吸附UI
這個(gè)也是個(gè)behavior踪旷,跟重力那些一樣曼氛,可以讓界面元素吸附到某一個(gè)點(diǎn)去
// 這個(gè)可以在比如點(diǎn)擊手勢(shì)的時(shí)候,讓一個(gè)指定的界面元素移動(dòng)到那個(gè)位置之類(lèi)的情況
let snap = UISnapBehavior.init(item: self.ball , snapTo: aPoint )
dynamicAnimator.addBehavior(snap)