2016-08-10 130 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

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

相關問題