Ich versuche, einen Effekt zu erstellen, bei dem drei Pfeile abwechselnd von sichtbar zu unsichtbar gehen.Seltsames Verhalten beim Animieren einer UIView mit [UIView animateKeyframesWithDuration]
Ich machte einen einfachen Algorithmus, bei dem jeder Pfeil von einem anderen Alpha-Wert ausgeht (wenn es 3 Pfeile gibt, würde der erste bei Alpha = 1 beginnen, der zweite bei Alpha = 0,6667, der dritte bei Alpha = 0,3337). Ich beginne dann eine Keyframe-Animation, die:
- Ändern Sie den Pfeil Opazität von seinem aktuellen Alpha auf 0 (die Dauer berechnet wird)
- sofort der Pfeil Opazität Wird auf 1 gesetzt
- Ändern Sie den Pfeil Opazität von 1 bis zum ersten Wert
Es scheint jedoch, dass einige Schritte aus irgendeinem Grund übersprungen werden.
Ein einfaches Beispiel:
[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{
_animatedView.alpha = 0.5;
}];
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.5 animations:^{
_animatedView.alpha = 0;
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0 animations:^{
_animatedView.alpha = 1;
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{
_animatedView.alpha = 0.5;
}];
} completion:nil];
In diesem Fall ist es sofort auf 0,5 gehen sollte, 0,5-0 in 1 Sekunde, gehen Sie zu 1 sofort, 1 bis 0,5 in 1 Sekunde. Es sollte daher einen nahtlosen Übergang geben, der so aussieht, als ob die Ansicht erscheint und verschwindet, aber es sieht so aus, als würde die Animation für einige Zeit auf Alpha = 0,5 hängen bleiben.
Theoretisch sollte der Effekt das gleiche sein wie wenn diese Keyframe-Animation mit:
[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{
_animatedView.alpha = 1;
}];
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:1 animations:^{
_animatedView.alpha = 0;
}];
} completion:nil];
Was Sie versuchen, zu tun ist vergleichbar mit der Verwendung von Animationsgruppen mit relativem Animationsstart und Laufzeitversatz. Ich habe das schon einmal versucht. Versuchen, einen nahtlosen Übergang zwischen 4 verschiedenen Pfaden innerhalb einer Formebene zu animieren. Meine Erfahrung ist, dass sie aus irgendeinem Grund nicht richtig funktionieren (ich habe viel versucht). Also habe ich dann eine eigene Completion-Block-Logik für die Layer geschrieben und innerhalb dieser eine Animation nach der Fertigstellung der anderen ausgelöst. Der Code sah ein bisschen dumm aus, aber die Animation funktionierte wie ein Zauber :). Vielleicht können Sie das gleiche versuchen. – croyneaus4u