2012-09-09 15 views
5

, orada bir UIView MyView ve bir UIImageView myImage MyView, görünümler hiyerarşi behinds:Bir UIImageview'e jest tanıyıcı nasıl eklenir? Projede

UIWindow
| - UIImageView (myImage)
| - UIView (MyView) [Bütün ekran]

Sonra

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
     tapGesture.numberOfTapsRequired = 1; 
     [myImage addGestureRecognizer:tapGesture]; 

viewController

yılında myImage bir jest tanıyıcı ekledi Ama jest myImage etkilemez, myImage setUserInteractionEnabled:YES sahiptir. MyImage uygulamasının myView'in önüne yerleştirileceği zaman, bu sorunu nasıl çözebilirim?

+0

Bir görüşün arkasında kalırsa, dokunma olmaz. – ohr

cevap

11

UIView Sayfanız, UIImageView numaralı telefona ulaşmadan önce dokunma noktalarını engeller.

Sen yüzden dokunuşları müdahale etmez UIView üzerinde UIView önünde, veya devre dışı bırakmak kullanıcı etkileşimi içinde UIImageView koymak istediğiniz.

Eğer şunlardan birini yapabilirsiniz, dokunuşun olaylarını yakalamak üzerinde daha hassas tahıl gerekirse: o varsa

  • UIImageView üstünde senin UIView koymak (tasarım amaçları için eğer örneğin bu maskeleri UIImageView biraz) ama) (olayları yakalamak değil userInteractionEnabled = NO yapmak ve aslında UIImageView
  • olayların dışında yakalamak için UIImageView altında farklı bir UIView kullanmak UIImageView üstünde senin UIView tutmak ve olayları yakalamak tutmak (userInteractionEnabled = YES), ancak UIView'u alt sınıflara ayırarak ve pointInside:withEvent: veya hitTest:withEvent: yöntemini geçersiz kılarak, içinden geçen olayları filtreleyin. Eğer gerçekten the dedicated Apple Programming Guide related to Event Handling okumalısınız fazla bilgi için

.

+0

fakat myImage'ın myView'ın arkasında kalması gerekiyor, dokunmaya başladığınızda ve hangi görünümün etkileneceğini belirlemek için bir saptama yapabileceğimin bir yolu var mı? – pqteru

+0

Evet. Cevabımda belirttiğim gibi, kullanıcı etkileşimini UIView'de ('userInteractionEnabled = NO') kapatın. Eğer 'UIView', UIImageView'ın bulunduğu yer dışında herhangi bir yerde dokunmatik olayları yakalamaya ihtiyaç duyuyorsa, birden fazla seçeneğiniz vardır: (1) UIView'inizi "UIImageView" in üstüne getirin ama "userInteractionEnabled = NO" ile yapın ve "UIImageView" in altında bulunan ve UIImageView tarafından yakalanmayan her türlü dokunma olayını yakalayan başka bir "UIView" veya (U) "UIView" i "UIImageView" in üstüne getirin, alt sınıfı gösterin ve hitTest'i geçersiz kılın: withEvent: 'veya' pointInside: withEvent: 'UIView yöntemleri – AliSoftware

1

kodum:

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] 
initWithTarget:self action:@selector(hasLongPressed)]; 
[press setMinimumPressDuration:0.1f]; //1ms 
press.delegate = (id)self; 
[self.DGEMLogo addGestureRecognizer:press]; 

iki özellik

1.) yapmak için UIImageView (self.DGEMLogo) [self.DGEMLogo addGestureRecognizer: basın] olarak GestureRecognizer eklemek için gerekli olan;

2.) sizin UIImage özelliği Etkileşim DOĞRU

Thats all üzere etkinleştirilmiş olarak ayarlayın.