2012-03-20 20 views
7

Estoy creando una UIView personalizada y agregando un UITAPGestureRecognizer en ella. Tengo un controlador para el gesto de tocar. Pero al mismo tiempo, quiero que mi UIView escuche touchesBegan & métodos toquesEnded. He implementado gestureRecognizer: shouldReceiveTouch: method también, pero los métodos touchesBegan/touchesEnded no se llaman. ¿Alguna pista de por qué?Escucha de evento UITouch junto con UIGestureRecognizer

Dentro de mi encargo UIView

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch { 
    return YES; 
} 

Dentro de mi controlador de vista

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease]; 
       UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[aCustomView addGestureRecognizer:myGestureRecognizer]; 
       [myGestureRecognizer release]; 
+0

Siempre pensé touchesBegan sólo se aplica a la vista del maestro de viewController. – CodaFi

Respuesta

10

Es necesario establecer cancelsTouchesInView (y probablemente delaysTouchesBegan y delaysTouchesEnded) a NO para el reconocedor gesto. El comportamiento predeterminado de un reconocedor de gestos es evitar que tanto él como la vista procesen el toque. Estas configuraciones te permiten ajustar ese comportamiento.

+0

Me gustaría que obtuviera el comportamiento que mencionas. Estoy usando la configuración predeterminada, sin embargo, mis métodos toques todavía reciben una llamada. Ver mi pregunta aquí: http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapier no podría poner cancelsTouchesInView estar vinculado a mi problema aquí : https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

Como se indicó anteriormente, debe establecer la propiedad cancelTouchesInView en NO en su UITapGestureRecognizer.

De los Documentos de Apple:

cancelsTouchesInView-Si un reconocedor gesto reconoce su gesto, se desenlaza los toques restantes de ese gesto de su vista (por lo la ventana no entregarlos). La ventana cancela los toques entregados anteriormente con con un mensaje (tocaCancelado: conEvento :). Si un reconocedor de gestos no reconoce su gesto, la vista recibe todos los toques en la secuencia multitoque.

Más información: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/

Cuestiones relacionadas