我遇到UIKit的动力,现在,这里是我想怎样做:如何在应用UIKit Dynamics的重力时获得UIView的帧更新?
- 利用重力=>OK 从屏幕顶部的“滴”多UIView的实例底部
- 当每个视图距离底部的距离像100px时触发一个事件。 =>NOT OK :(
这里是我的尝试:
- 添加于观察者的 “框架” 属性为每个视图=>我不知道为什么,但observeValueForKeyPath是从来没有呼吁(见下面的代码)...
- 为每个视图添加一个透明的碰撞边界,并收听UICollisionBehaviorDelegate =>这种有效,但它不是我想要的行为,因为当然,视图是“停止“由边界我希望它往下走
这是我的测试代码:
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的远底部
我将不胜感激任何帮助
正如我在我的原始说我试图碰撞。但碰撞问题是......碰撞^^。而且我不想要这种行为,如果您愿意,我希望意见能够“穿越”碰撞。这就是为什么我尝试KVO没有成功。 – Ticko
你是对的,对不起,我有点急。如果通过从UICollisionBehavior中删除有问题的项目(视图碰撞)来检测它,那么它是否会起作用? – Skrew
我只是试过,但下降的意见反弹了一点之前,我可以删除碰撞行为:( – Ticko