Sto cercando di fare una "traduzione" esatta di questa UIView codice di animazione basata su blocchi:Animate utilizzando CABasicAnimation
[UIView animateWithDuration:0.5
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
someView.frame = CGRect(0, 100, 200, 200);
}
completion:nil];
utilizzando CABasicAnimation invece.
Sono totalmente consapevole che la proprietà telaio è in realtà una combinazione di posizione, limiti e AnchorPoint dello strato sottostante, come è descritto qui: http://developer.apple.com/library/mac/#qa/qa1620/_index.html
... e ho già fatto una soluzione del genere, utilizzando due CABasicAnimations una impostazione la posizione, una per limiti e funziona per quella vista.
Il problema è comunque che ho sotto-visualizzazione nella mia vista. someView ha una sottoview di tipo UIScrollView in cui metto ancora un'altra sottocategoria di tipo UIImageView. La sottoview UIScrollView ha autoresizingMask impostato su UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight. Tutto funziona perfettamente se utilizzo la versione basata su blocco UIView, tuttavia quando provo a utilizzare CABasicAnimations le sottoview iniziano a comportarsi in modo imprevisto (cioè vengono ridimensionate a larghezze errate). Quindi sembra che autoresizingMask non funzioni correttamente quando si utilizza CABasicAnimations. Ho notato anche che le sottoview non ricevono una chiamata a setFrame:, sebbene la proprietà frame della vista genitore cambi dopo che le modifiche alla posizione del layer e ai limiti sono stati apportati.
Ecco perché mi piacerebbe sapere quale sarebbe il codice corretto di replicare con CABasicAnimation che ciò che sta accadendo quando si usa animateWithDuration metodo UIView.
Sì, ho creato due CABasicAnimations uno per @ "position" KeyPath, l'altro per @ "bounds". Ho impostato i valori individuali da Valore e Valore. Poi ho creato un CAAnimationGroup e aggiunto queste due animazioni, dopo di che aggiungo l'animazione di gruppo al livello. Alla fine ho impostato someView.layer.bounds e someView.layer.position sui nuovi valori desiderati (usati in toValue) in modo che la modifica persista effettivamente nell'albero del livello del modello. –
L'animazione funziona con someView, che è una vista principale (principale) contenente altre visualizzazioni secondarie. Il problema è che le sottoview non vengono ridimensionate, mantengono la loro larghezza come se ci fosse un problema con autoresizingMask (che è impostato su di esse). Funziona tutto quando si usa UIView animateWithDuration: comunque vorrei usare CABasicAnimations poiché ho bisogno di opzioni di configurazione aggiuntive ... –
Sono con voi. Credo che poiché stai animando direttamente il livello, dovrai gestire manualmente anche l'animazione dei sottolivelli. – matt