任何對於CALayer屬性的修改,都是隱式事務,都會有動畫效果.這樣的事務會在run-loop中被提交.
1 - (void)viewDidLoad { 2 //初始化一個layer,添加到主視圖 3 layer=[CALayer layer]; 4 layer.bounds = CGRectMake(0, 0, 200, 200); 5 layer.position = CGPointMake(160, 250); 6 layer.backgroundColor = [UIColor redColor].CGColor; 7 layer.borderColor = [UIColor blackColor].CGColor; 8 layer.opacity = 1.0f; 9 [self.view.layer addSublayer:layer]; 10 11 [super viewDidLoad]; 12 } 13 14 -(IBAction)changeLayerProperty { 15 //設置變化動畫過程是否顯示,默認為YES不顯示 16 17 [CATransaction setDisableActions:NO]; // 設置是否啟動隱式動畫 18 layer.cornerRadius = (layer.cornerRadius == 0.0f) ? 30.0f : 0.0f; // 設置圓角 19 layer.opacity = (layer.opacity == 1.0f) ? 0.5f : 1.0f; // 設置透明度 20 }
顯式事務,通過明確的調用begin,commit來提交動畫
1 [CATransaction begin]; 2 3 //顯式事務默認開啟動畫效果,kCFBooleanTrue關閉 4 [CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions]; 5 6 //動畫執行時間 7 [CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration]; 8 9 //[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]]; 10 11 layer.cornerRadius = (layer.cornerRadius == 0.0f) ? 30.0f : 0.0f; 12 layer.opacity = (layer.opacity == 1.0f) ? 0.5f : 1.0f; 13 14 [CATransaction commit];