2011-09-07 13 views
5

Basta chiedersi c'è un modo per avere una vista per riconoscere i gesti di tocco mentre viene animata? Sto lavorando su una vista che ha una linea cashapelayer legata ad essa. Quando l'utente esegue la panoramica della vista (gesto di panoramica), la linea segue di conseguenza fino a quando l'utente non interrompe il panning. A questo punto viene eseguita un'animazione che riporta la vista alla sua posizione originale e lo strato di cordino indietro. Ora il mio unico vero problema è che mentre la vista e il tether stanno animando la vista non risponde ai gesti di tocco ...Come riconoscere il gesto di tocco mentre si sta animando una vista

Qualcuno sa qualche trucco? Spero che la mia spiegazione sia comprensibile e grazie in anticipo!

(se il concetto di vista cablata non è chiaro, c'è un'app gratuita chiamata app di discovr che darà un esempio).

+0

AGGIORNAMENTO: Per chiarire, la delimitazione originale rettangolo di vista riconosce il gesto del rubinetto, ma non riconosce il gesto rubinetto della vista in movimento, in altri parole, il frame corrente. – johnnyd

+0

È necessario verificare questa risposta: http://stackoverflow.com/a/4432546/129202 – Jonny

+0

La soluzione nel collegamento sopra può funzionare con la gestione del tocco non elaborata ma potrebbe non funzionare con i gesti. Vedi questa soluzione alternativa per i gesti: http://stackoverflow.com/questions/8340329/how-to-make-gesturerecognizer-working-in-an-animating-uiimage-view –

risposta

15

Suppongo che si stia utilizzando il metodo di animazione [UIView animateWithDuration: delay: options: animations: completion:];.

In tal caso, è necessario passare UIViewAnimationOptionAllowUserInteraction come opzione per ottenere la visualizzazione animata per rispondere ai tocchi mentre si sta animando.

+1

Grazie per la risposta, ma sto già facendo quella. Sembra che il gesto sia riconosciuto ma solo nel rettangolo originale della vista, non nella vista in movimento immediato ... aggiornerò la mia domanda in modo che sia più chiaro – johnnyd

2

È necessario impostare due opzioni: UIViewAnimationOptionAllowUserInteraction e UIViewAnimationOptionAllowAnimatedContent. Prima consente di interagire con le viste durante l'animazione, seconde forze per ridisegnare le viste su ogni fotogramma dell'animazione e non utilizzare le istantanee dei fotogrammi iniziali e finali.

+0

Ho provato il tuo suggerimento ma ancora nessun dado. :(Potrei provare questo approccio: [user-interaction-disabled] (http://stackoverflow.com/questions/7221688/caanimation-user-input-disabled) perché questo mi sta facendo impazzire :) :) – johnnyd

+0

Hm. Che ne dici di provare ad aggiungere il riconoscimento dei gesti a una superview della tua vista animata e quindi controllare se hai toccato la vista animata con 'hitTest:'? –

+0

Provato questo prima di tutto questo e provato di nuovo solo per il gusto di provare e ancora non funziona ... Io proprio non capisco ... grazie però per i suggerimenti! – johnnyd

1

(Swift 3) opzione Passo .allowUserInteraction

UIView.animate(withDuration: 0.75, delay: 0.0, options: [.allowUserInteraction], animations: { 
     // Desired animation(s) 
}, completion: { (finished: Bool) in 
     // Completion 
}) 
Problemi correlati