Attualmente sto leggendo Core Animation Guide di Apple, dove ho trovato il seguente passo per quanto riguarda viste strato-backed in iOS:Perché i documenti indicano che le animazioni CALayer devono essere nei blocchi di animazione di UIView?
Se si desidera utilizzare le classi Core Animation di avviare le animazioni, è necessario rilasciare tutte le chiamate in Core Animation dall'interno di un blocco di animazione basato su vista. La classe UIView disattiva le animazioni di livello per impostazione predefinita, ma le riattiva all'interno dei blocchi di animazione. Quindi tutte le modifiche apportate al di fuori di un blocco di animazione non sono animate.
Appena sotto la citazione, la documentazione include l'elenco seguente codice:
[UIView animateWithDuration:1.0 animations:^{
// Change the opacity implicitly.
myView.layer.opacity = 0.0;
// Change the position explicitly.
CABasicAnimation* theAnim = [CABasicAnimation animationWithKeyPath:@"position"];
theAnim.fromValue = [NSValue valueWithCGPoint:myView.layer.position];
theAnim.toValue = [NSValue valueWithCGPoint:myNewPosition];
theAnim.duration = 3.0;
[myView.layer addAnimation:theAnim forKey:@"AnimateFrame"];
}];
il che implica che entrambe le animazioni implicite ed esplicite CALayer
s supporto UIView
s devono essere posizionati all'interno di un blocco di animazione.
Tuttavia, ho trovato questo per essere palesemente falso. Nello specifico, ho implementato con successo animazioni esplicite usando le classi Core Animation al di fuori di un blocco di animazione UIView
.
Ho frainteso questo passaggio, o è scaduto, o qualcos'altro?
Alcune aggiunte:
I presuppongono che "la classe UIView disabilita animazioni strato di default ma li riattiva dentro blocchi animation" si riferisce al metodo +[UIView setAnimationsEnabled:]
. Quando torno a un computer che può farlo, controllerò per vedere se +[UIView areAnimationsEnabled]
restituisce YES
o NO
.
Quindi stai dicendo che 'UIView' disabilita * l'animazione implicita * sui loro livelli di supporto (eccetto all'interno dei blocchi di animazione di' UIView'), ma continua a consentire animazioni esplicite? Se è così, questo differisce dalla documentazione, che sostiene che * tutte le chiamate di CA * devono essere all'interno di un blocco di animazione. – ravron
Se questo è quello che dice, allora è sbagliato/mal scritto. Non è assolutamente vero. –
@ravron Questo paragrafo si trova nella sezione "Come animare viste con supporto layer". Per me è stato abbastanza ovvio che si tratta di livelli che supportano un UIView. –