2012-05-05 10 views
14

Pregunta rápida: ¿cómo puedo detectar si un reconocedor de gestos de toque se encuentra dentro de una subvista de la vista a la que se agrega? P.ej. Si hago clic en un objeto como un cuadrado que se ha agregado como subvista a un fondo al que se ha agregado un reconocedor de toque, ¿cómo puedo detectar que se ha tocado?Cómo detectar un gesto de tap en las subvistas

+0

Por favor, aclare claramente lo que le gusta hacer? ¿Quieres reconocer el clic en la subvista? –

Respuesta

37

Puede agarrar el punto del grifo del reconocedor de gestos cuando se llama al método de manejo correspondiente a cualquier vista que desee utilizando -locationInView:. Luego, use el siguiente método en UIView: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event para obtener una referencia a la subvista real que se tocó recordando que el punto que pasa está en el mismo espacio de coordenadas que la vista.

algo de código para empezar:

CGPoint point = [tapGestureRecognizer locationInView:parentView]; 
UIView *tappedView = [parentView hitTest:point withEvent:nil]; 

Para pruebas de posicionamiento para trabajar la vista tiene que tener la propiedad userInteractionEnabled establecido en YES. Muchas vistas, como UILabel s, tienen este ajuste en NO de manera predeterminada. Así que antes de la anterior:

self.subviewOfInterest.userInteractionEnabled = YES; 
+0

¡Gracias, eso ayuda mucho! – Fitzy

+0

Gracias @Brandom –

0

puede utilizar el requireGestureRecognizerToFail: reconocer el grifo subvista consulte this código

13

tal vez debería establecer como: subviews.userInteractionEnabled = SI; ¡buena suerte!

+0

¡Maldición! Esto es lo que necesitaba. Mi vista secundaria fue ignorada por gestureRecognizer, y ahora funciona. Gracias. – surfrider

Cuestiones relacionadas