簡體   English   中英

檢測應用程序中的所有觸摸

[英]Detecting all touches in an app

在iPad應用程序中,無論用戶何時觸摸屏幕,我都想顯示圖像,突出顯示他們觸摸的點。 該應用程序包含許多嵌套視圖,所有這些視圖均應接受觸摸並正常運行。

看起來很簡單,但是我沒有找到一種好的方法。 touches began: with event使用touches began: with event根視圖控制器上的touches began: with event和相關功能無法使用,因為如果觸摸了子視圖,則不會觸發事件。 我還創建了一個“虛擬”手勢識別器,它將手勢事件傳遞給另一個繪制圖像的類。 效果很好,按鈕也可以,但是破壞了UIScrollViews,我猜想其他帶有手勢調整器的子視圖。

是否有無處你可以訪問,而不會影響其中的觸摸被戶主所有觸摸事件?

謝謝。

您的虛擬手勢識別器應該可以。 只要注意設置狀態。 可能->開始-> ...

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

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

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

另一個選擇是在您的應用程序中子類化主UIWindow並重寫此方法

- (void)sendEvent:(UIEvent *)event

在這里,您應該可以訪問所有事件。 過濾它們很容易。

您可以將UITapGestureRecognizer應用於整個視圖,並將cancelsTouchesInView屬性設置為NO 這樣一來,您就可以在不攔截所有觸摸事件的情況下,將視圖及其子視圖上的所有輕按通知給您。

此外,您可以實現-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:委托方法,以防止該手勢識別器踩踏UIScrollView之類的視圖使用的手勢識別器。

您可以嘗試覆蓋hitTest:withEvent:

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

這也許就是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM