2011-08-29 3 views
14

Ho un UIButton sotto un UIView (trasparente). L'UIView sopra ha un UISwipeGestureRecognizer aggiunto ad esso, e questo è il suo unico scopo: rilevare determinati gesti di scorrimento. Voglio che tutti gli altri tocchi siano ignorati da tale UIView e passati ad altre viste (come il mio UIButton sotto). Attualmente, l'UIView di cui sopra sembra rilevare il tap (per esempio), non fare nulla (come dovrebbe essere), e non lasciare che UIButton abbia la possibilità di rispondere.Come passare un "tocco" a UIButton che si trova sotto UIView con UISwipeGestureRecognizer?

Preferirei non implementare il mio swipe recognizer, se possibile. Qualche soluzione/consiglio? Fondamentalmente voglio solo sapere come dire a un UIView di prestare attenzione solo a un certo tipo di riconoscimento di gesture aggiunto, e ignorare (e quindi lasciar passare le viste dietro) tutti gli altri tocchi.

risposta

2

Devo essere appena stato in un funk ieri - mi sono svegliato con una soluzione semplice oggi. Aggiungi UISwipeGesture a una vista che è una superview sia su UIView che su UIButton. Quindi, durante l'elaborazione di questi swipes, scopri dove ha avuto origine lo swipe e se quel punto si trova nel frame di dove avevo l'UIView. (Come ho già detto, l'unica ragione per l'esistenza del UIView è stato quello di definire un area di destinazione per questi gesti di scorrimento.)

0

Non riesci a mettere il tuo pulsante in cima alla vista e ad aggiungere i riconoscitori di gesti anche a quel pulsante?

Alla fine, UIButton eredita forma UIView tramite UIControl. Quindi non c'è praticamente nulla che si possa fare con una vista ma non con un pulsante.

+0

No, non riesco a mettere l'UIButton sopra l'UIView, per motivi non correlati - e non penso che sarebbe intelligente farlo comunque per cercare di risolvere questo problema. – danbretl

14

Hai impostato:

mySwipeGesture.cancelsTouchesInView = NO; 

per consentire i tocchi per essere inviati alla visualizzare la gerarchia e il gesto?

Inoltre, assicurarsi che la vista sulla parte superiore è:

theTransparentView.opaque = NO; 
theTransparentView.userInteractionEnabled = YES; 

ho avuto abbastanza buon successo attaccare gesti alla vista padre senza la necessità di creare una visualizzazione secondaria trasparente sulla parte superiore per il gesto. Sei sicuro di aver bisogno di farlo?

0

Nel mio caso, l'ho risolto non utilizzando un pulsante, ma piuttosto un UITapGestureRecognizer. Il mio riconoscimento di pan gesture è stato aggiunto alla vista di sfondo e il gesto di tocco è stato aggiunto a una vista sopra di esso.