2012-02-19 14 views
9

iOS uygulamasında UIGestureRecognizer kullanıyorum ve bazı sorunlar yaşıyorum.UIView'nin bir parçası için UIGestureRecognizer

Sadece hareketlerin belirli bir alanda çalışmasını istiyorum, bu yüzden belirli bir kareye sahip yeni bir UIView oluşturdum ve kök görünümüne ekledim. Hareketler bununla gayet iyi çalışıyor, ancak şu andaki tek sorun, bu yeni görüntünün altındaki (arka plandaki nesneler) altındaki nesneleri tıklayamam. UserInteractionEnabled değerini NO olarak ayarlarsanız, bu, hareketleri bozar, böylece bir seçenek olmaz.

Bunu düzeltmek için ne yapabilirim?

Teşekkürler.

cevap

31

Hareket tanımlayıcınız için yeni bir görünüm oluşturmayın. Tanıyıcı bir locationInView: yöntemini uygular. Hassas bölgeyi içeren görünüm için ayarlayın. HandleGesture üzerinde, bu gibi önem verdiğiniz bölgeyi vurun:

0) Tüm bunları, ilgilendiğiniz bölgeyi içeren görünümde yapın. Sadece jest tanıyıcı için özel bir görünüm eklemeyin.

1) Kur mySensitiveRect

@property (assign, nonatomic) CGRect mySensitiveRect; 
@synthesize mySensitiveRect=_mySensitiveRect; 
self.mySensitiveRect = CGRectMake(0.0, 240.0, 320.0, 240.0); 

2) sizin gestureRecognizer oluşturun:

gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[self.view addGestureRecognizer:gr]; 
// if not using ARC, you should [gr release]; 
// mySensitiveRect coords are in the coordinate system of self.view 


- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.view]; 
    if (CGRectContainsPoint(mySensitiveRect, p)) { 
     NSLog(@"got a tap in the region i care about"); 
    } else { 
     NSLog(@"got a tap, but not where i need it"); 
    } 
} 

duyarlı rect MyView koordinat sisteminde başlatıldı edilmelidir, aynı görünüm hangi tanıyıcıyı tutturmak için.

+0

Üzgünüz, bu ne yapacak? ve mySensitiveRect değişkeni için kullanıyorum (0, 0, 320, 480)? Tam bir örneğiniz var mı? Teşekkürler: D –

+0

@DavidMurray: Umarım bu daha temiz – danh

+0

Teşekkürler, bunu yaptı. :-) –

İlgili konular