![](/img/trans.png)
[英]How to detect tap and double tap at same time using UITapGestureRecognizer?
[英]UITapGestureRecognizer - detect double OR triple tap?
我有一個案例,需要通過雙擊和特定視圖的三擊來完成兩種完全不同的行為。 我將其設置得非常標准,代碼如下:
UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)];
[gestureRecognizerDoubleTap setNumberOfTapsRequired:2];
[self.theView addGestureRecognizer:gestureRecognizerDoubleTap];
UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)];
[gestureRecognizerTripleTap setNumberOfTapsRequired:3];
[self.theView addGestureRecognizer:gestureRecognizerTripleTap];
我遇到的問題是,如果完成三次點擊,雙擊方法也會被觸發,因為它會在第三次之前檢測到2次點擊。 因此,在三次敲擊時,兩種方法都被調用。
顯然,這不是代碼或底層SDK的固有問題,因為它是完全預期的。 但是,我很好奇是否有人聰明地以某種方式阻止雙擊功能被調用如果完成三擊? 我假設我可能不得不在延遲計時器上設置雙擊功能(這將等待一瞬間確認是否完成了三次點擊),但我不確定是否有更好的方法,甚至以干凈的方式設置這種東西的最好方法是什么?
提前感謝您提供的任何建議!
您可以使用requireGestureRecognizerToFail:
此問題:
UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)];
[gestureRecognizerTripleTap setNumberOfTapsRequired:3];
[self.theView addGestureRecognizer:gestureRecognizerTripleTap];
UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)];
[gestureRecognizerDoubleTap requireGestureRecognizerToFail:gestureRecognizerTripleTap];
[gestureRecognizerDoubleTap setNumberOfTapsRequired:2];
[self.theView addGestureRecognizer:gestureRecognizerDoubleTap];
除非三擊一擊失敗,否則雙擊不會發射。
像往常一樣, 類引用有一些額外的信息,並提到這個場景是使用這種方法的好時機。
如何創建2個識別器,分別為1和2個抽頭(通過numberOfTapsRequired
配置它們)。 這顯然會照顧到1和2個水龍頭。 要檢測3個分接頭,您可以檢查1分接收識別器是否在2分接頭之后立即被觸發。
順便說一句,雖然我不知道你的應用程序做了什么,同時使用三重和雙擊手勢似乎是潛在的可用性問題。 三次點擊本身並不是與應用程序交互的常見方式。 我至少會考慮長按而不是三按。 這將完全避開這一技術挑戰:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.