2012-03-15 8 views
6

çocuklar,İki UILongPressGestureRecognizer, bir başka

iki UILongPressGestureRecognizer ekledik olamaz, ateş edebilirsiniz. İstediğim şey, iki düğme 0,3 saniye aşağı basıldığında, "shortPressHandler" öğesini başlatır. Kullanıcı bu iki düğmeyi başka bir 1,2 saniye daha basmaya devam ederse, "longPressHandler" komutunu verin. Şimdi sadece shortPressHandler'ı kovdum ve longPressHandler hiç kovulmadı. Bence shortPressGesture ilk tanınır ve longPressGesture asla bir şansa sahip değildir. Herkes istediğimi nasıl elde edeceğimi gösterebilir mi? Şimdiden teşekkürler.

UILongPressGestureRecognizer *longPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressHandler:)] autorelease]; 
longPressGesture.numberOfTouchesRequired = 2; 
longPressGesture.minimumPressDuration = 1.5; 
longPressGesture.allowableMovement = 10; 
longPressGesture.cancelsTouchesInView = NO; 
longPressGesture.enabled = true; 
[self.view addGestureRecognizer:longPressGesture]; 

UILongPressGestureRecognizer *shortPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(shortPressHandler:)] autorelease]; 
shortPressGesture.numberOfTouchesRequired = 2; 
shortPressGesture.minimumPressDuration = 0.3; 
shortPressGesture.allowableMovement = 10; 
shortPressGesture.cancelsTouchesInView = NO; 
shortPressGesture.enabled = true; 
[self.view addGestureRecognizer:shortPressGesture]; 
+0

Teşekkürler. Düğmeler serbest bırakılmasa bile kısa süreliğine ateş etmeyi istersem ne yapmam gerektiğini biliyor musun? – Globalhawk

+0

Üzgünüz, bu mesajı görmedim - eğer mesajın altında yazıyorsan, '@ name ... ile yazmalısın, eğer doğru anladığımı anlayabiliyorsan, şu gibi bir şey istiyorsun: kullanıcı presleri, shortPress 0.3s sonra kovuluyor ve basını serbest bırakmazsa, 1.2'den sonra ateş yakılır. Bu doğru mu? –

+0

@rokjarc Tam olarak istediğim bu. Teşekkürler. – Globalhawk

cevap

6

shortPressGesture eklemeden önce bu satırı ekleyin:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

Not: shortGesture tutan hemen sonra 0.3 saniye olarak adlandırılan ancak almazsınız o 0.3 saniye ve uzun 1.2 saniye arasında ise musluk bırakıldığında . Eğer tap 1.2 s'den uzunsa (kodunuzda muhtemelen yazım hatası olan 1.5s var) sadece uzunPressGesture patlayacaktır.

DÜZENLEME: Eğer (uzun basın bir olay) yangına etkinlik işleyicileri hem istiyorsanız

Ancak, bunu yapmak gerekir:

Sizin UIView arasında <UIGestureRecognizerDelegate>.h dosyayı uygulamalıdır. çizgi eklemek yerine Şimdi

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 
} 

: Bu yöntemi eklemek .m dosyasında

shortPressGesture.delegate = self; 
longPressGesture.delegate = self; 

NOT:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

Bu iki satırı ekleyin: başka bir UIGestureRecognisers linke sahipseniz UIVIew numaralı telefon numaranıza shouldRecognizeSimultaneouslyWithGestureRecognizer: numaralı telefondan kontrol etmeniz gerekmektedir, aksi takdirde YES'u döndürebilirsiniz.

+0

Bir çekicilik gibi çalışıyor! Çok teşekkür ederim! :-) – Globalhawk

+0

@Globalhawk: Rica ederim :) –