2013-08-28 139 views
2

是否可以讓特定手勢失敗,以便識別下一個可能的手勢?滑動和平移手勢重疊

至更具體地,看樣品片段:

UISwipeGestureRecognizer *swipeLeft = [initialize UISwipeGestureRecognizer... @selector(handleSwipe:)] 

swipeLeft = UISwipeGestureRecognizerDirectionLeft; 

swipeLeft.delegate = self; 

UIPanGestureRecognizer *pan = [initialize UIPanGestureRecognizer... @selector(handlePan:)] 

pan.delegate = self; 

[pan requireGestureRecognizerToFail:swipeLeft]; 

上述代碼指出,如果向左滑動不被裝置識別,平移手勢處理機將被使用。

所以我的問題:是否有可能讓swipeLeft根據handleSwipe上檢查的某些條件故意(在被設備識別爲向左輕掃後識別)失敗,並讓平移手勢處理觸摸輸入?

謝謝。

回答

11

退房這裏UIGestureRecognizerDelegate協議:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIGestureRecognizerDelegate_Protocol/Reference/Reference.html

具體地說,

gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

方法可能是有用的。如果您只需從該方法中返回YES,則可以同時識別兩個手勢,因此您可以正確響應這兩個手勢。

+0

同時識別手勢不給我,我瞄準所需的行爲。向左滑動應該將UIView從一個位置移動到另一個位置,平移手勢也會移動它,但是會根據您的觸摸平移和速度進行移動。謝謝。 – rgb

+0

聽起來像平移識別器可以讓你用觸摸移動視圖,但是如果檢測到滑動,你可以設置一個標誌,告訴平底鍋停止工作,因爲滑動行爲將接管。你認爲這可能會完成你想要做的事情嗎? – Eric

+0

這是一個偉大的想法,這是我想要實現的,是否有一個更簡單的實現,無需編寫或覆蓋自己的touchesBegan,Moved,Ended方法來標記並讓當前手勢停止並傳遞到下一個手勢行爲?謝謝。 – rgb

0

假設你有一個泛手勢來實現一些其他處理程序,你就不能這樣做:

-(void)handleSwipe:(id)sender { 

    if //criteria is met to ignore left swipe 
    { 
     [self handlePan:self]; 
    } 
} 

-(void)handlePan:(id)sender { 

    // handle pan gesture here 

} 
+0

這可能會工作,但handlePan(帶有其自己的touchesBegan,Moved,Ended的實現,這對於noob來說有點複雜)實際上是在視圖控制器上使用的不同庫中。謝謝。 – rgb