Core Animation學習筆記一:CATransactions

CATransaction 事務類,能夠對多個layer的屬性同時進行修改.它分隱式事務,和顯式事務.

區分隱式動畫和隱式事務:隱式動畫經過隱式事務實現動畫 。 html

區分顯式動畫和顯式事務:顯式動畫有多種實現方式,顯式事務是一種實現顯式動畫的方式。  oop

1.隱式事務 動畫

除顯式事務外,任何對於CALayer屬性的修改,都是隱式事務.這樣的事務會在run-loop中被提交.
複製代碼
- ( void)viewDidLoad {
     // 初始化一個layer,添加到主視圖
    layer=[CALayer layer];
    layer.bounds = CGRectMake( 00200200);
    layer.position = CGPointMake( 160250);
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.borderColor = [UIColor blackColor].CGColor;
    layer.opacity =  1.0f;
    [self.view.layer addSublayer:layer];    
    [super viewDidLoad];
}

-(IBAction)changeLayerProperty
{
     // 設置變化動畫過程是否顯示,默認爲YES不顯示
    [CATransaction setDisableActions:NO];
     // 設置圓角
    layer.cornerRadius = (layer.cornerRadius ==  0.0f) ?  30.0f :  0.0f;
     // 設置透明度
    layer.opacity = (layer.opacity ==  1.0f) ?  0.5f :  1.0f;

}   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];

相關文章
相關標籤/搜索