2012-08-24 3 views
15

Ho un CALayer ho aggiunto al mio punto di vista:Il CALayer si anima con cambio di frame?

myView.myCALayer = [[CALayer alloc] init]; 
CGSize size = myView.frame.size; 
myView.myCALayer.frame = CGRectMake(0, 0, size.width, size.height); 
myView.myCALayer.backgroundColor = [[UIColor blackColor] CGColor]; 
[myView.layer addSublayer:myView.myCALayer]; 

Quando si tenta di cambiare la cornice del CALayer dopo aver cambiato il telaio della myView, il ridimensionamento della CALayer anima. Non ho aggiunto animazione al CALayer, quindi non lo capisco. Ho persino tentato di richiamare removeAllAnimations sul layer prima del ridimensionamento e animava ancora il ridimensionamento.

Qualcuno sa cosa potrebbe succedere qui?

risposta

34

Esiste effettivamente un'animazione implicita sull'impostazione di alcuni valori per un CALayer. Devi disabilitare le animazioni prima di impostare un nuovo fotogramma.

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

[myView.myCALayer.frame = (CGRect){ { 10, 10 }, { 100, 100 } ]; 

[CATransaction commit]; 

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW3

+14

Scotts destra, ma alternativa alla seconda linea è possibile usare [setDisableActions CATransaction: SI] più breve-mano per la versione di valori-chiave. Inoltre, consulta "Proprietà animabili" nella Guida dell'animazione core. Indica in modo specifico quali proprietà animabili utilizzano un'animazione implicita su semplici modifiche ai valori per impostazione predefinita. http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimProps.html – Bobjt