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

touchesMoved seen by all view controllers in Swift?

我有一个 ViewController 定义了 touchesMoved() 以在用户将手指拖过屏幕时递增计数器:

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

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

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

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

感谢您的任何见解。

不是在视图控制器中定义 touchesMoved,而是在 视图 中定义它。视图控制器的主视图就可以了。 (您需要继承 UIView 并将视图控制器的主视图作为该子类的实例。)

它会有同样的效果,但现在你不在视图控制器层次结构中,你不会从其他视图控制器的视图中获取消息。

另一种选择:从 touches: 中拉出一个 UITouch 并查看它的 view。如果这不是您的看法,请忽略此电话。