2012-02-19 13 views
9

Estoy usando UIGestureRecognizer en mi aplicación de iOS y estoy teniendo algunos problemas.UIGestureRecognizer por parte de UIView

Solo quiero que los gestos funcionen en un área determinada de la vista, así que hice una nueva UIView con un marco específico y la agregué a la vista raíz. Los gestos funcionan bien con esto, pero el único problema ahora es que no puedo hacer clic en las cosas que están debajo/detrás de esa nueva vista (los objetos que están en la vista raíz). Si configuro userInteractionEnabled en NO, rompe los gestos, por lo que no es una opción.

¿Qué puedo hacer para solucionarlo?

Gracias.

Respuesta

31

No cree una nueva vista para su reconocedor de gestos. El reconocedor implementa un método locationInView: Configúrelo para la vista que contiene la región sensible. En handleGesture, haga una prueba de la región que le interese así:

0) Haga todo esto en la vista que contiene la región que le interesa. No agregue una vista especial solo para el reconocedor de gestos.

1) Configuración mySensitiveRect

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

2) Crear su gestureRecognizer:

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"); 
    } 
} 

El rect sensible deben ser inicializado en el sistema de coordenadas de myView, la misma vista a la que se conecte el reconocedor.

+0

Lo sentimos pero, ¿qué hará esto? y para la variable mySensitiveRect, ¿uso (0, 0, 320, 480)? ¿Tienes un ejemplo completo? Gracias: D –

+0

@DavidMurray: espero que sea más claro – danh

+0

Gracias, eso lo hizo. :-) –

Cuestiones relacionadas