2016-08-10 232 views
0

我有一个长按手势,显示另一个控制器。在呈现的控制器中,我使用touchesBegan(),touchesMoved()和touchedEnded()方法来检测视图控制器上的触摸。将触摸传递给另一个视图控制器(iOS)

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

是否有无论如何为提供的屏幕识别触摸,同时仍然按长按?如何将这个长按识别器传递给下一个视图控制器?

回答

1

手势识别器存在于视图中。当您呈现另一个视图控制器时,该视图已暂时消失。它的消失造成了这个问题。解决方案是不实际呈现另一个视图控制器,但假装它。在你的第一个视图控制器上画出你的第一个视图(我们称之为view1)。创建另一个确切大小的视图并放在顶部(我们称之为view2)。将手势识别器放在view2上。用户长按屏幕。即使视图2把你能找出用户在厂景触及如下亮点:

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

在这一点上,你可以在后面的视图2 VIEW3和厂景前面动画。这将产生新屏幕的效果,但接收触摸命令的视图从未到达任何地方,并仍在监听命令。

+0

很好的答案!生病了吧!谢谢 –

相关问题