2011-12-07 63 views
3

在iPad應用程序中,無論用戶在何處觸摸屏幕,我都想要顯示圖像,突出顯示它們觸摸的點。該應用程序包含多個嵌套視圖,所有這些視圖都應該接收並且行爲正常。檢測應用程序中的所有觸摸

看起來很簡單,但我沒有找到一個好方法來做到這一點。在根視圖控制器上使用touches began: with event和相關函數不起作用,因爲如果觸摸子視圖,事件不會被觸發。我還創建了一個「虛擬」手勢識別器,它只是將觸摸事件傳遞給繪製圖像的另一個類。這工作偉大的是和按鈕的工作,但打破了UIScrollViews,我猜測其他子視圖與姿態重建。

有無處你可以訪問所有觸摸事件不會影響其中的觸摸被向何處去?

感謝。

回答

6

你的假手勢識別器應該沒問題。注意設置狀態。可能 - >開始 - > ...

基本上,您的手勢識別器正在轉發所有觸摸,以便在觸摸存在時始終處於開始或可能狀態。

爲了擺脫其他手勢識別器的問題,在此委託方法中返回YES。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

其他選項是子類在您的應用程序主要的UIWindow並重寫此方法

- (void)sendEvent:(UIEvent *)event 

在這裏,你應該獲得的所有事件。過濾它們非常容易。

3

您可以將UITapGestureRecognizer應用於整個視圖並將cancelsTouchesInView屬性設置爲NO。這將允許您在不截獲所有觸摸事件的情況下通知視圖及其子視圖上的所有點擊。

此外,您可以實施-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:委託方法,以防止此手勢識別器跺跺像UIScrollView這樣的視圖使用的手勢識別器。

+0

這可能會起作用。我會試一試! –

1

你可以嘗試重寫則hitTest:withEvent:方法

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 

這可能是你在找什麼。

+0

中斷hitTest方法不會跟蹤觸摸,所以我不得不做很多額外的邏輯來跟蹤不移動的觸摸,並且如果兩個附近的點擊是相同的觸摸。 –