[英]How to get UIView's frame update while applying UIKit Dynamics' gravity to it?
我現在正在體驗UIKit Dynamics,這是我想做的事情:
這是我嘗試的:
這是我的測試代碼:
var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.animator = UIDynamicAnimator(referenceView: view)
self.gravity = UIGravityBehavior()
self.animator.addBehavior(gravity)
let timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("createView"), userInfo: nil, repeats: true)
}
func createView() {
var newView = UIView(frame: CGRectMake((UIScreen.mainScreen().bounds.size.width/2) - 20, -40, 40, 40))
self.view.addSubview(newView)
self.gravity.addItem(newView)
newView.addObserver(self, forKeyPath: "frame", options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
if keyPath == "frame" {
if let newView = object as? UIView {
println(newView.frame.origin.y)
if (newView.frame.origin.y > UIScreen.mainScreen().bounds.size.height - 100) {
println("Trigger event !")
}
}
}
}
使用此代碼,視圖將正確下降,但是如果視圖離底部100px遠,則不會觸發任何事件
我將不勝感激任何幫助
一種方法是添加一個UICollisionBehavior,在底部上方創建一個100px的視圖位置,並定義一個動作,當您的項目與此碰撞時將調用該動作。
我現在無法為您創建示例,但是http://www.raywenderlich.com/50197/uikit-dynamics-tutorial將提供很大的幫助,請查找“隱形邊界和碰撞”部分。 雖然是Objective-C,但這不應該成為問題,因為這很容易。
我也一直在嘗試使其工作,實際上,在更新框架之后,應該從UIDynamicAnimator中進行委托回調。
我設法解決了這個問題:
class FrameReportingView: UIView {
override var center: CGPoint {
didSet{
print("center: \(center)")
}
}
}
我正在使用UIPushBehavior
並且在每個幀中設置了中心。 您可以在FrameReportingView
上實現委托,以在更改中心后創建回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.