[英]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.