2012-03-20 16 views
7

Sto creando un UIView personalizzato e aggiungo un UITapGestureRecognizer su di esso. Ho un gestore per il gesto di tocco. Ma allo stesso tempo voglio che il mio UIView ascolti i touchBegan & tocca i metodi Ended. Ho implementato gestureRecognizer: shouldReceiveTouch: metodo anche touchesBegan/touches I metodi Ended non vengono richiamati. Qualche indizio perché?Ascolto dell'evento UITouch insieme a UIGestureRecognizer

All'interno mia abitudine UIView

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

Dentro la mia vista del regolatore

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

ho sempre pensato touchesBegan applicata solo alla vista del padrone del viewController. – CodaFi

risposta

10

È necessario impostare cancelsTouchesInView (e probabilmente delaysTouchesBegan e delaysTouchesEnded) per NO per il sistema di riconoscimento gesto. Il comportamento predefinito di un riconoscitore di gesti è di evitare che entrambi e la vista elaborino il tocco. Queste impostazioni ti consentono di mettere a punto quel comportamento.

+0

Vorrei davvero che stavo prendendo quel comportamento che hai citato. Sto usando le impostazioni predefinite, ma i miei metodi tocco vengono ancora chiamati. Vedi la mia domanda qui: http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapier non riuscirebbe a mettere cancelsTouchesInView essere collegato al mio problema qui : https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

Come indicato in precedenza, è necessario impostare la proprietà cancelTouchesInView su NO su UITapGestureRecognizer.

dalla documentazione di Apple:

cancelsTouchesInView-Se un sistema di riconoscimento gesto riconosce il suo gesto, si slega le restanti tocchi di quel gesto da loro punto di vista (in modo la finestra non consegnare loro). La finestra annulla i tocchi consegnati in precedenza con con un messaggio (toccaCancellato: conEvent :). Se un riconoscitore di movimento non riconosce il suo gesto, la vista riceve tutti i tocchi nella sequenza multi-touch.

Ulteriori approfondimenti: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/

Problemi correlati