J'anime une vue entre deux points en utilisant UIViewAnimationCurveLinear, donc je connais la vélocité de cette animation. Dans certaines circonstances, je veux ajouter un UIViewAnimationCurveEaseOut pour ralentir la vue. Pour rendre cet effet homogène, l'animation d'accélération doit commencer à la même vitesse que l'animation linéaire qui l'a précédée. Compte tenu d'une distance fixe sur laquelle je veux que cet assouplissement se produise, comment puis-je calculer la durée nécessaire pour atteindre cette vitesse de démarrage connue? Par exemple, disons que j'anime ma vue de x = 0 à x = 100 sur 10 secondes. La vélocité est donc de 10 pixels/seconde. Je veux maintenant que la vue décélère de x = 100 à x = 120 en utilisant une animation UIViewAnimationCurveEaseOut. Quelle devrait être la durée de cette animation pour s'assurer qu'elle commence à 10 pixels/seconde? Je crois comprendre que CAMediaTimingFunction de Core Animation contrôle la stimulation d'animation en utilisant des courbes de Bézier cubiques, où les deuxième et troisième points de contrôle dictent la forme de la courbe. Je suppose que les fonctions d'accélération UIViewAnimationCurve sont également des courbes de Bézier cubiques. Si je connaissais les points de contrôle par défaut utilisés par ces fonctions, je devrais pouvoir calculer la formule pour calculer la durée en fonction de la vitesse et de la distance, mais je n'ai pas réussi à trouver ces points de contrôle par défaut.Comment puis-je calculer la durée d'une animation UIViewAnimationCurveEaseOut avec une vitesse et une distance de départ connues?
Répondre
Je ne pourrais peut-être pas vous donner une réponse complète, mais je peux vous diriger vers la méthode -getControlPointAtIndex: values: de CAMediaTimingFunction. Cela devrait vous permettre de créer une fonction de temporisation EaseOut, puis d'examiner ses points de contrôle.
Je vous dirigerai également vers un article by Matt Gallagher sur les courbes d'accélération personnalisées effectuées à l'aide de CAKeyframeAnimation, qui pourrait également vous être utile.
Vous pouvez utiliser une constante (appelez-la BEZIER_INTEGRAL_CONSTANT
) qui se rapproche de l'intégrale de la courbe de Bézier pour une animation de 1 seconde à partir d'une vitesse de 1 pixel/seconde. Pour l'assouplissement linéaire, cette constante est 0.5
. Pour UIViewAnimationCurveEaseOut
, il s'agit de environ0.7
. La formule en termes de durée est la suivante:
duration = distance/(velocity * BEZIER_INTEGRAL_CONSTANT)
Pour exemple, lorsque la distance est de 20 pixels et la vitesse de départ est de 10 pixels/seconde, la durée doit être d'environ: 20/(10 * 0.7) = 2.9 seconds
.
- 1. Comment calculer la vitesse avec Core Location?
- 2. Comment calculer une heure de fin en fonction de l'heure de début et de la durée?
- 3. Comment calculer la vitesse avec Core Location?
- 4. Google Maps API v3 calculer distance, durée Synchrone
- 5. calculer la durée de l'appel
- 6. Calculer une distance de 100 mètres lorsque la latitude et la longitude sont un point connu
- 7. Comment ajuster dynamiquement la durée/vitesse d'une animation Tween dans Android
- 8. calculer la distance avec linq ou subsonic
- 9. Calculer la distance et la durée à travers dans Google Maps
- 10. Modification de la durée de DelayActivity avec une durée différente
- 11. WPF animation Durée
- 12. Comment calculer la distance entre deux GeoPoints avec Android MapView
- 13. Comment trouver un point dans la surface de la Terre avec un point d'origine, une distance et une direction (azimut)
- 14. Calcul de la distance la plus courte (distance perpendiculaire) entre un point et une ligne
- 15. Comment calculer une courbe de Bézier avec seulement des points de début et de fin?
- 16. Trouver des rangs consécutifs et calculer la durée
- 17. calculer la moyenne et la variance avec une itération
- 18. Déplacer un UIImageView avec une animation
- 19. Comment puis-je calculer la distance et le relèvement en utilisant la latitude et la longitude?
- 20. J2ME - Calculer la distance entre 2 latitude et longitude
- 21. Rechercher une chaîne entre deux chaînes connues
- 22. Comment faire une animation avec Swing?
- 23. Comment calculer la distance à partir d'un fichier GPX?
- 24. Est-ce que je peux faire une variable de durée dans une animation de cadre à cadre xml?
- 25. Calculer la distance à l'aide de la trigonométrie en 3D
- 26. Obtenir ECEF XYZ étant donné les coordonnées de départ, la distance, l'azimut et l'altitude
- 27. Une animation wpf dynamiquement modifiable
- 28. Comment définir une limite globale de vitesse (vitesse) CURL?
- 29. Comment calculer la distance de Manhattan avec la fonction/procédure SQL
- 30. animation saccadée utilisant Core Animation
Pourquoi ne pas simplement utiliser EaseOut sur l'ensemble de l'animation? –