2012-04-22 14 views
6

Estoy haciendo una aplicación donde tengo una vista de fondo y que tiene seis UIImageView como subvistas. Tengo un UITapGestureRecognizer para ver cuándo se toca uno de los UIImageView s y el método handleTap a continuación es lo que llama el reconocedor de gestos. Sin embargo, cuando ejecuto esto, el hitTest:withEvent: siempre devuelve la vista de fondo incluso cuando toco en una de las imageViews. ¿Tiene algo que ver con el evento cuando llamo a hitTest?hitTest: withEvent: Not Working

Gracias

- (void) handleTap: (UITapGestureRecognizer *) sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint location = [sender locationInView: sender.view]; 
     UIView * viewHit = [sender.view hitTest:location withEvent:NULL]; 
     NSLog(@"%@", [viewHit class]); 
     if (viewHit == sender.view) {} 
     else if ([viewHit isKindOfClass:[UIImageView class]]) 
     { 
      [self imageViewTapped: viewHit]; 
      NSLog(@"ImageViewTapped!"); 
     } 
    } 
} 

Respuesta

12

UIImageView son, por defecto, configurado para no registrar la interacción del usuario.

De la documentación UIImageView:

Nuevos objetos de visión de imagen están configurados para no tener en cuenta los eventos de usuario por defecto . Si desea gestionar eventos en una subclase personalizada de UIImageView, debe cambiar explícitamente el valor de la propiedad userInteractionEnabled a YES después de inicializar el objeto.

Así, justo después de inicializar sus puntos de vista usted debe tener:

view.userInteractionEnabled = YES; 

Esto a su vez la interacción de nuevo y usted debe ser capaz de registrar eventos de toque.

+0

¡Muchas gracias! –

1

Hay una reescritura de su enfoque (solo GR en la vista que contiene) que funciona, pero que va a hacer nuestro dolor cerebral conseguir los sistemas de coordenadas derecho, que es definitivamente el problema de la código publicado

La mejor respuesta es adjuntar N reconocedores de gestos a cada uno de los UIImageViews. Todos pueden tener el mismo objetivo y usar el mismo método handleTap :. El handleTap: puede obtener la vista sin necesidad de buscar cualquier geometría de esta manera:

UIImageView *viewHit = (UIImageView *)sender.view; 
+0

Ah, bueno, el proyecto está casi terminado y todo el proyecto usa el fragmento de código dado, pero quizás más tarde, cuando lo tenga, lo intentaré. Gracias de cualquier manera. –