2012-09-09 18 views
5

En el proyecto, hay una myView UIView y un myImage UIImageView traseros del myView, vistas jerarquía:¿Cómo agregar el reconocedor de gestos a una vista de UIImage?

UIWindow
| - UIImageView (myImage)
| - UIView (myView) [pantalla completa]

Luego añadió un reconocedor gesto para myImage en ViewController

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

Pero el gesto no afecta myImage, myImage tiene setUserInteractionEnabled:YES. Solo afectará cuando myImage se coloque delante de myView, ¿cómo puedo solucionar este problema?

+0

Si está detrás de una vista, no recibirá los toques. – ohr

Respuesta

11

Su UIView obviamente interceptar los toques antes de que puedan alcanzar el UIImageView.

Usted puede poner su UIImageView en frente de su UIView, o la interacción del usuario desactivar el UIView por lo que no intercepta los toques.

Si necesita un grano más fino sobre la captura de los eventos de toque, se puede:

  • poner su UIView en la parte superior de la UIImageView si se tiene que para fines de diseño (si enmascara la UIImageView un poco, por ejemplo,) pero que sea no captura eventos (userInteractionEnabled = NO), y utilizar un diferente UIView por debajo de la UIImageView para coger realmente los eventos fuera de la UIImageView
  • mantener su UIView en la parte superior de la UIImageView y mantenerlo captura de eventos (userInteractionEnabled = YES), pero filtre los eventos que pasan a través de él, subclasificando su UIView y anulando el método pointInside:withEvent: o el hitTest:withEvent:.

Para obtener más información realmente debería leer the dedicated Apple Programming Guide related to Event Handling.

+0

pero myImage tiene que permanecer detrás de myView, ¿hay alguna forma de que pueda hacer una detección mientras toco el inicio y determinar qué vista va a afectar? – pqteru

+0

Sí. Como indiqué en mi respuesta, desactivé la interacción del usuario ('userInteractionEnabled = NO') en UIView. Si el 'UIView' todavía necesita capturar eventos táctiles en cualquier lugar, excepto donde se encuentra el' UIImageView', tiene múltiples posibilidades: (1) hacer su 'UIView' en la parte superior de' UIImageView' pero con 'userInteractionEnabled = NO' y poner otra 'UIView' debajo de' UIImageView' que captura cada evento táctil que no haya sido capturado por 'UIImageView' o (2) coloque' UIView' encima de 'UIImageView', subclass it & anule' hitTest: withEvent: 'o' pointInside: withEvent: 'métodos de UIView – AliSoftware

1

mi código:

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

dos propiedades son lo necesite hacer

1.) añadir el GestureRecognizer a su UIImageView (self.DGEMLogo) [self.DGEMLogo addGestureRecognizer: prensa];

2.) configurar su propiedad UIImage Interacción permitió TRUE

eso es todo.

Cuestiones relacionadas