CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务.
1、隐式动画通过隐式事务实现动画 。(除显式事务外,任何对于CALayer属性的修改,都是隐式事务.这样的事务会在run-loop中被提交.)
layer = [CALayer layer];
//设置layer高清显示
[_layer setContentsScale:[[UIScreen mainScreen] scale]];
//设置背景颜色
[_layer setBackgroundColor:[UIColor blueColor].CGColor];
//设置大小
[_layer setBounds:CGRectMake(0.0, 0.0, 200.0, 200.0)];
CGPoint anchorPoint = {0.5, 0.0};
//anchorPoint(锚点),它的取值在0-1,取到1就表示离原点最远。ios的坐标系原点在左上角。
[_layer setAnchorPoint:anchorPoint];
//方法告诉layer将位于它之下的layer都遮盖住。这是必须的,这样会使圆角不被遮,但是这样会导致阴影效果没有,很多网上都给出资料,再添加一个SubLayer,添加阴影
[_layer setMasksToBounds:NO];
//此方法传入NO启动隐式动画
[CATransaction setDisableActions:![_enableAnimations isOn]];
//设置动画时间
[CATransaction setAnimationDuration:_animationDuration];
//设置layer的圆角半径
[_layer setCornerRadius:([_layer cornerRadius] == 0.0 ? 25.0 : 0.0)];
//设置背景颜色
[_layer setBackgroundColor:([_layer backgroundColor] == [UIColor blueColor].CGColor ? [UIColor greenColor].CGColor : [UIColor blueColor].CGColor)];
//设置边框宽度
[_layer setBorderWidth:([_layer borderWidth] == 0.0 ? 10 : 0.0)];
//设置透明度
[_layer setOpacity:([_layer opacity] == 1.0 ? 0.2 : 1.0)];
2、显式动画有多种实现方式,显式事务是一种实现显式动画的方式。 (通过明确的调用begin,commit来提交动画)
//开始动画
[CATransaction begin];
//显式事务默认开启动画效果,kCFBooleanTrue关闭
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
//动画执行时间
[CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration];
//开始提交执行动画
[CATransaction commit];
//当外层的layer 执行(commit)之后内层的动画才会开始执行(commit)