1
我有一個用於縮放視圖的UIPinchGestureRecognizer的處理程序方法。我試圖做的是當兩個觸摸在捏手勢的屏幕上,並且如果手指擡起,剩下的手指將由平移手勢識別器來管理。有沒有辦法做到這一點?我想不出一個合適的方式將一個手勢從一個處理器傳遞到另一個處理器。如何將手勢從UIPinchGestureRecognizer處理程序轉換爲UIPanGestureRecognizer處理程序?
我有一個用於縮放視圖的UIPinchGestureRecognizer的處理程序方法。我試圖做的是當兩個觸摸在捏手勢的屏幕上,並且如果手指擡起,剩下的手指將由平移手勢識別器來管理。有沒有辦法做到這一點?我想不出一個合適的方式將一個手勢從一個處理器傳遞到另一個處理器。如何將手勢從UIPinchGestureRecognizer處理程序轉換爲UIPanGestureRecognizer處理程序?
這應該很容易。創建兩個手勢識別器。 UIPinchGestureRecognizer和UIPanGestureRecognizer。不要忘記成爲兩者的代表!
pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scaleHandler:)];
[pinchRecognizer setDelegate:self];
[pinchRecognizer setDelaysTouchesBegan:NO];
[pinchRecognizer setDelaysTouchesEnded:NO];
[pinchRecognizer setCancelsTouchesInView:NO];
panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandler:)];
[panRecognizer setMaximumNumberOfTouches:2];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[panRecognizer setDelaysTouchesBegan:NO];
[panRecognizer setDelaysTouchesEnded:NO];
[panRecognizer setCancelsTouchesInView:NO];
現在執行下面的手勢委託方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
這將使這兩個處理器被觸發,這樣當你鬆開手指將盤的一個,但是當你有他們兩個就掐。
好的,謝謝。我注意到的一件事是,一旦一根手指被移除,當它切換到平移手勢時,那麼兩個手勢識別器都變爲活動的,平底鍋和捏。我想我可以解決這個問題..但是,一旦一根手指被移除,是否會完全放棄捏手勢識別器?看着UIGestureRecognizer文檔,我猜你不能。 – Joe
另外還有一件事..當允許同時識別手勢時,panGestureRecognizer調用它的方法,但視圖的superview的panGestureRecognizer也是如此。這對我來說似乎有些奇怪,我不太瞭解背後的邏輯。我假設無法防止這種情況呢? – Joe
您可以通過移除其目標( - (void)removeTarget:(id)目標操作:(SEL)操作)或通過簡單地禁用它來阻止觸發手勢regoznier(http://stackoverflow.com/questions/6593772/如何取消重置一個uigesturerecognizer)。因此,無論何時您想讓任何識別器停止,只需將其禁用即可。 我從來沒有經歷過你的第二個問題(關於父母的觀點)。也許你可以分享一些你用來創建手勢識別器的代碼,以查看可能發生的事情。祝你好運。 –