Domanda

Ho un app con un UIView trascinabile posto in fondo. La vista trascinabili è neanche completamente fuori schermo e, ha una scheda "pull" che l'utente può trascinare verso l'alto o verso il basso. Trascinando su e giù attualmente lavora, ma vorrei dare lo stesso comportamento come le notifiche di Apple scivolare fuori cassetto.

Per esempio, se trascino la vista del 50% verso l'alto e togliere il dito dallo schermo, poi vorrei la vista draggable di continuare a muoversi verso l'alto da sola. Analogamente, se l'utente ha trascinato solo la vista fuori, dire 30% verso l'alto, quindi la visualizzazione dovrebbe cadere giù nella posizione predefinita.

Idealmente, mentre io posso fare il trascinando verso l'alto / basso, l'isnt movimento molto "biologico" ....

In questo momento, sto realizzando il trascinamento verso l'alto e verso il basso tramite UIPanGestureRecognizer, solo nel caso che è pertinente alla questione.

E 'forse qualcosa sulla falsariga di alcuni matematica intelligente con la posizione Y della vista trascinabile, poi facendo il resto del movimento con alcune CAAnimations?

Potrebbe essere un po 'difficile da visualizzare, quindi ho aggiunto alcune schermate qui sotto.

default schermo con la vista sul fondo

La vista trascinato tramite la linguetta a destra

Grazie!

È stato utile?

Soluzione

Quando lo stato del vostro UIPanGestureRecognizer diventa UIGestureRecognizerStateEnded, utilizzare il messaggio velocityInView: per trovare la velocità del gesto.

Se la velocità è prossima a zero, aprire o chiudere la visualizzazione basata sulla posizione della vista e lo stato precedente della vista. Ad esempio, se la vista è stato chiuso ed è stato tirato fuori oltre il 10%, aprirlo. Se è stato aperto ed è stato tirato in più del 10%, chiuderlo. In caso contrario, spostarlo nella posizione pre-gesto.

Se la velocità non è vicino a zero, utilizzare il segno della componente Y per determinare il nuovo stato della vista. Se il segno è positivo, chiudere la vista. Se il segno è negativo, aprire la vista.

Si dovrà sperimentare per capire esattamente quale definizione di “vicino allo zero” si sente meglio.

In ogni caso, vi verrà voglia di animare la vista della sua posizione finale dopo la fine gesto, con una breve durata (probabilmente tra il 0,1 e il .25 secondi). Si consiglia di scegliere la durata in base alla velocità e la distanza la vista ha bisogno di viaggiare. Il pannello delle notifiche di sistema fa questo. (Prova trascinandolo parzialmente premuto lentamente rispetto rapidamente. E 'anima alla sua posizione finale a velocità diverse a seconda di quanto velocemente si trascinava quando si lascia andare.)

Si vorrà sperimentare per trovare la curva migliore di animazione (UIViewAnimationOptionCurveEaseOut, ecc), e si consiglia di utilizzare una curva diversa a seconda se si sta aprendo o chiudendo la vista e la velocità del gesto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top