區分隱式動畫和隱式事務:隱式動畫經過隱式事務實現動畫 。 html
區分顯式動畫和顯式事務:顯式動畫有多種實現方式,顯式事務是一種實現顯式動畫的方式。 oop
1.隱式事務 動畫
除顯式事務外,任何對於CALayer屬性的修改,都是隱式事務.這樣的事務會在run-loop中被提交.} spa
2. 顯式事務 orm
經過明確的調用begin,commit來提交動畫 htm
修改執行時間 blog
[CATransaction begin]; 事務
//顯式事務默認開啓動畫效果,kCFBooleanTrue關閉 ci
[CATransaction setValue:(id)kCFBooleanFalse get
forKey:kCATransactionDisableActions];
//動畫執行時間
[CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration];
//[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];
anotherLayer.cornerRadius = (anotherLayer.cornerRadius == 0.0f) ? 30.0f : 0.0f;
layer.opacity = (layer.opacity == 1.0f) ? 0.5f : 1.0f;
[CATransaction commit];
[CATransaction begin];
[CATransaction begin];
[CATransaction setDisableActions:YES];
layer.cornerRadius = (layer.cornerRadius == 0.0f) ? 30.0f : 0.0f;
[CATransaction commit];
//上面的動畫並不會當即執行,須要等最外層的commit
[NSThread sleepForTimeInterval:10];
//顯式事務默認開啓動畫效果,kCFBooleanTrue關閉
[CATransaction setValue:(id)kCFBooleanFalse
forKey:kCATransactionDisableActions];
//動畫執行時間
[CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
//[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];
anotherLayer.cornerRadius = (anotherLayer.cornerRadius == 0.0f) ? 30.0f : 0.0f; [CATransaction commit];