Question

I ont une application avec un UIView déplaçable placé au fond. La vue draggable isnt totalement et il a vidéo libre un « tirette » que l'utilisateur peut faire glisser vers le haut ou vers le bas. Faire glisser vers le bas et travaille actuellement, mais je voudrais lui donner le même comportement que les notifications d'Apple glisser le tiroir.

Par exemple, si je fais glisser la vue sur 50% vers le haut et retirer mon doigt de l'écran, alors je voudrais la vue draggable de continuer à se déplacer vers le haut lui-même. De même, si l'utilisateur ne traîna la vue sur, disons 30% vers le haut, la vue devrait redescendre à sa position par défaut.

Idéalement, alors que je peux faire la glisser vers le haut / vers le bas, le isnt de mouvement très « organique » ....

En ce moment, je suis l'accomplissement de la tirant vers le haut et vers le bas par l'intermédiaire UIPanGestureRecognizer, juste au cas où est pertinent à la question.

Est-ce peut-être quelque chose le long des lignes de certains mathématiques intelligent avec la position Y de la vue draggable, faisant alors le reste du mouvement avec quelques CAAnimations?

Il est peut-être un peu difficile à visualiser, donc je l'ai ajouté quelques écrans ci-dessous.

par défaut avec l'écran une vue en bas

La vue traîna via l'onglet à droite

Merci!

Était-ce utile?

La solution

Lorsque l'état de votre UIPanGestureRecognizer devient UIGestureRecognizerStateEnded, utilisez le message velocityInView: pour trouver la vitesse du geste.

Si la vitesse est proche de zéro, ouvrir ou fermer la vue en fonction de la position de la vue et l'état précédent de la vue. Par exemple, si la vue était fermée et il a été retiré plus de 10%, ouvrez-le. Si elle était ouverte et a été tiré dans plus de 10%, fermez-le. Dans le cas contraire, le déplacer à sa position d'avant-geste.

Si la vitesse n'est pas proche de zéro, utilisez le signe de la composante Y pour déterminer le nouvel état de la vue. Si le signe est positif, fermez la vue. Si le signe est négatif, ouvrez la vue.

Vous devrez expérimenter pour comprendre exactement ce que la définition de « proche de zéro » se sent le mieux.

Dans tous les cas, vous souhaitez animer le point de vue de sa position finale après la fin du geste, en utilisant une courte durée (probablement entre 0,1 et .25 secondes). Vous pouvez choisir la durée en fonction de la vitesse et la distance de la vue doit Voyage. Le panneau des notifications système fait cela. (Essayez le faisant glisser lentement par rapport à mi- course rapidement. Il anime à sa position finale à des vitesses différentes en fonction de la vitesse que vous traînez quand vous laisser partir.)

Vous voulez expérimenter pour trouver la meilleure courbe d'animation (UIViewAnimationOptionCurveEaseOut, etc.), et vous pouvez utiliser une courbe différente selon que vous ouvrez ou fermez la vue et la vitesse du geste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top