【发布时间】:2015-08-24 16:07:54
【问题描述】:
我现在正在体验 UIKit Dynamics,这就是我想做的事情:
- 使用重力将多个 UIView 实例从屏幕顶部“拖放”到底部 => OK
- 当每个视图与底部的距离为 100 像素时触发事件。 => 不行 :(
这是我尝试过的:
- 在每个视图的“框架”属性上添加观察者 => 我不知道为什么,但从未调用过 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 !")
}
}
}
}
使用此代码,视图将正确下降,但当视图距离底部 100 像素时不会触发任何事件
如果有任何帮助,我将不胜感激
【问题讨论】:
-
你是怎么做到的?
标签: ios swift key-value-observing uikit-dynamics