touchesMoved被Swift中的所有视图控制器看到了吗?

时间:2016-10-07 09:27:36

标签: ios swift touchesmoved

我有一个ViewController定义touchesMoved()来增加一个计数器,因为用户在屏幕上拖动手指:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    numMoved += 1
    print("Moved: \(numMoved)")
}

当用户转到另一个没有定义touchesMoved()的视图控制器时,我希望不会发生任何事情。 (新的视图控制器被定义为类OtherViewController,它直接从UIViewController继承,因此不会获得我为第一个视图控制器定义的touchesMoved()重写。)

然而,在点击一个将我带到另一个视图控制器的按钮后,我仍然看到打印的消息,这意味着即使我不再在跟踪拖动的原始视图控制器上,仍会调用touchesMoved()。

我是否遗漏了一些简单的事情,以确保对touchesMoved()的覆盖仅影响它在其中定义的ViewController?

感谢您的任何见解。

1 个答案:

答案 0 :(得分:0)

不是在视图控制器中定义touchesMoved,而是在视图中定义它。视图控制器的主视图可以。 (您将需要子类化UIView并使视图控制器的主视图成为此子类的实例。)

它将具有相同的效果,但现在您不在视图控制器层次结构中,并且您不会从其他视图控制器的视图中获取消息。

另一种选择:从touches:中取出UITouch并查看其view。如果这不是您的观点,请忽略此调用。