Sto provando a creare un effetto in cui tre frecce passano dal visibile all'invisibile in alternativa.Strano comportamento che anima un UIView usando [UIView animateKeyframesWithDuration]
Ho creato un semplice algoritmo in cui ogni freccia inizia da un valore alfa diverso (se sono presenti 3 frecce, la prima parte da alfa = 1, la seconda da alfa = 0.6667, la terza da alfa = 0,3337). Sono poi inizio un'animazione fotogramma chiave che:
- Modifica la freccia opacità dalla alfa corrente a 0 (la durata è calcolata)
- impostare immediatamente la freccia opacità a 1
- modificare l'opacità freccia da 1 al primo set di valori
Tuttavia sembra che alcuni passaggi vengano saltati per qualche motivo.
Un semplice esempio:
[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 questo caso dovrebbe andare a 0,5 istantaneamente, 0,5 a 0 in 1 secondo, vai a 1 istantaneamente, 1 a 0,5 a 1 secondo. Dovrebbe quindi fare una transizione senza soluzione di continuità che assomigli alla visualizzazione e alla scomparsa della vista, ma sembra che l'animazione si blocchi su alfa = 0.5 per un po 'di tempo.
Teoricamente, l'effetto dovrebbe essere lo stesso come se si utilizza questa animazione fotogramma chiave:
[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];
cosa si sta cercando è simile all'utilizzo di gruppi di animazione con l'inizio relativo all'animazione e l'offset di durata. Ho provato a fare lo stesso una volta. cercando di animare una transizione senza soluzione di continuità tra 4 diversi percorsi all'interno di un livello forma. La mia esperienza è che non funzionano correttamente per qualche motivo (ho provato molto). Così ho scritto la mia logica di blocco di completamento per i livelli e all'interno ho attivato un'animazione dopo il completamento dell'altro. Il codice sembrava un po 'stupido, ma l'animazione ha funzionato come un fascino :). Quindi forse puoi provare la stessa cosa. – croyneaus4u