2012-10-24 235 views

回答

29

ACB引用了UIGestureRecognizer的參考文獻。爲了讓多一點具體的,假設你有一個連接泛手勢識別一個視圖,你必須在你的視圖控制器這些方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan"); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesMoved"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesEnded"); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesCancelled"); 
} 

- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { 
    NSLog(@"panGesture"); 
} 

,當然還有鍋手勢識別器被配置爲發送panGestureRecognizerDidUpdate:信息。

現在假設您觸摸視圖,將手指移動到足以識別平移手勢,然後擡起手指。該應用打印什麼?

如果手勢識別具有cancelsTouchesInView設置爲YES應用程序會記錄這些消息:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

你可能會取消前一個以上的touchesMoved

因此,如果您將cancelsTouchesInView設置爲YES(默認值),則系統將在從手勢識別器發送第一條消息之前取消該觸摸,並且您不會再爲該觸摸獲取任何與觸摸相關的消息。

如果手勢識別具有cancelsTouchesInView設置爲NO應用程序會記錄這些消息:

touchesBegan 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
(etc.) 
panGesture 
touchesEnded 

所以,如果你設置cancelsTouchesInViewNO,系統會繼續發送的觸摸相關的消息手勢觸摸,與手勢識別器的消息交織。觸摸將正常結束,而不是被取消(除非系統因其他原因取消觸摸,例如在觸摸過程中按下主頁按鈕)。

+0

謝謝!當您將cancelsTouchesInView設置爲否時,該事件將取消彈出權限? – jebberwocky

+1

我不明白「取消彈出」的意思。 –

3

從蘋果開發者門戶link

cancelsTouchesInView - 如果一個手勢識別器識別出它的姿態, 它解除綁定的剩餘觸摸從他們的角度看這個手勢(所以 窗口不會傳遞他們)。該窗口取消之前的 傳送的觸摸(touchesCancelled:withEvent :)消息。如果手勢識別器未識別其手勢,則該視圖將在多點觸摸序列中接收到所有觸摸。 。

cancelsTouchesInView:

一個布爾值影響是否觸摸被 遞送到視圖時姿勢被識別。

@屬性(非原子)BOOL cancelsTouchesInView

討論

當此 屬性是YES(缺省)和接收器識別其手勢, 被掛起的該姿勢的觸摸沒有遞送到 視圖,並且先前遞送的觸摸通過 觸摸取消:withEvent:發送到視圖的消息。如果手勢 識別器無法識別其手勢,或者此屬性的值爲NO,則該視圖會接收多點觸摸 序列中的所有觸摸。

+0

什麼是由「那是暫停的手勢的觸摸」? –

相關問題