2012-03-20 8 views
7

Özel UIView oluşturuyorum ve üzerine bir UITapGestureRecognizer ekliyorum. Musluk hareketi için bir işleyicim var. Ama aynı zamanda UIView'imin dokunuşlarını dinlemesini istiyorum.touchEnded yöntemleri. Ben jestRecognizer uyguladı: shouldReceiveTouch: yöntem aynı zamanda dokunur.Began/dokunur. Herhangi bir ipucu neden? Benim özel İçindeUIGestureRecognizer ile birlikte UITouch olayını dinleme

UIView benim görünümü denetleyicisi Sen jest tanıyıcı için NO için cancelsTouchesInView (ve muhtemelen delaysTouchesBegan ve delaysTouchesEnded) ayarlamanız gerekir

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease]; 
       UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[aCustomView addGestureRecognizer:myGestureRecognizer]; 
       [myGestureRecognizer release]; 
+0

Hep touchesBegan yalnızca ana viewController en görünüme uygulanan düşündük. – CodaFi

cevap

10

İçinde

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch { 
    return YES; 
} 

. Bir jest tanıyıcısının varsayılan davranışı, hem ona hem de görünümün dokunma işlemine sahip olmasından kaçınmaktır. Bu ayarlar, bu davranışa ince ayar yapmanızı sağlar.

+0

Eminim bahsettiğin davranışa sahip olsaydım. Varsayılan ayarları kullanıyorum, yine de dokunma yöntemlerim hala çağrılıyor. Burada soruma bakın: http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapier, cancelsTouchesInView 'i yayınlamada başarısız olur. https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

Daha önce de belirtildiği gibi, cancelTouchesInView özelliğini NO ürününe UITapGestureRecognizer sayfanızda ayarlamanız gerekir. Elma Dokümanlar itibaren

: Bir jest tanıyıcı onun jest, onların görünümünden o jest kalan rötuşları keser tanır

Eğer cancelsTouchesInView-(şimdiye pencere teslim olmaz). Pencere daha önce teslim edilen dokunuşları bir (touchesCancelled: withEvent :) mesajıyla iptal eder. Bir jest tanıyıcı, hareketini tanımıyorsa, görünüm çoklu dokunma dizisinde tüm dokunuşları alır.

fazla okuma: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/