Próbuję stworzyć efekt, w którym trzy strzały zmieniają się z widocznych na niewidoczne na przemian.Dziwne zachowanie przy animacji UIView przy użyciu [UIView animateKeyframesWithDuration]
Zrobiłem prosty algorytm, w którym każda strzałka zaczynałaby się od innej wartości alfa (jeśli są 3 strzały, pierwsza zaczynałaby się od alfa = 1, druga w alfa = 0.6667, trzecia w alfa = 0,3337). I wtedy zaczynają kluczową animacji klatek że:
- Zmień krycie strzałka z bieżącej alfa 0 (czas trwania jest obliczany)
- ustawiona natychmiast strzałka krycie do 1
- Zmian strzałki krycie od 1 do pierwszego zestawu wartości
Wygląda jednak na to, że niektóre kroki są pomijane z jakiegoś powodu.
Prosty przykład:
[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];
W tym przypadku należy przejść do 0,5 natychmiast 0,5 do 0 w ciągu 1 sekundy, przejdź do 1 natychmiast 1 do 0,5 do 1 sekundy. Powinno więc wykonać płynne przejście, które wygląda tak, jakby widok pojawiał się i znikał, ale wygląda na to, że animacja utknęła na alpha = 0.5 przez kilka chwil.
Teoretycznie, efekt powinien być taki sam, jak w przypadku korzystania z tego klucza animacji klatek:
[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];
co chce Czynność ta jest podobna do korzystania z grup animacji z względnym przesunięciem początkowym i czasowym animacji. Próbowałem zrobić to samo wcześniej. próbuje animować płynne przejście między 4 różnymi ścieżkami w warstwie kształtu. Z mojego doświadczenia wynika, że z jakiegoś powodu nie działają prawidłowo (dużo próbowałem). Napisałem więc własną logikę bloku ukończenia dla warstw i w tym czasie uruchomiłem jedną animację po zakończeniu drugiej. Kod wyglądał trochę głupio, ale animacja działała jak urok :). Więc może możesz spróbować tak samo. – croyneaus4u