CALayer的隐式动画和显式动画


任何对于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];

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM