将触摸传递给另一个视图控制器(iOS)

时间:2016-08-10 19:44:32

标签: ios

我有一个长按手势,呈现另一个控制器。在提供的控制器中,我有touchesBegan(),touchesMoved()和touchingEnded()方法,用于检测视图控制器上的触摸。

当我长按并按住时,会显示下一个视图控制器。如果我不释放长按,并在屏幕上移动我的手指,则不会调用touchesMoved()方法,当我停止触摸时,不会调用touchesEnded()。但是,当我释放长按触摸并再次触摸时,将调用这些方法,因为长按手势识别器不再接收触摸,而是呈现的视图控制器接收触摸。

无论如何,所呈现的屏幕是否能够识别触摸,同时仍然按下长按?如何将此长按识别器传递给下一个视图控制器?

1 个答案:

答案 0 :(得分:1)

手势识别器存在于视图上。当您呈现另一个视图控制器时,该视图已暂时消失。它的消失导致了这个问题。解决方案是不实际呈现另一个视图控制器,而是假装它。在第一个视图控制器上画出你的第一个视图(我们称之为view1)。创建另一个确切大小的视图并将其放在最上面(我们称之为view2)。将手势识别器放在view2上。用户长按屏幕。即使view2得到了触摸,你也可以找到用户触摸view1的位置,如下所示:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    if let touch = touches.first {
        let position :CGPoint = touch.locationInView(view1)
    }
}

此时,您可以在view2后面和view1前面的view3中设置动画。这将产生进入新屏幕的效果,但接收触摸命令的视图从未进入任何地方并且仍在监听命令。