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)];
//开始动画 [CATransaction begin]; //显式事务默认开启动画效果,kCFBooleanTrue关闭 [CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions]; //动画执行时间 [CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration]; //开始提交执行动画 [CATransaction commit]; //当外层的layer 执行(commit)之后内层的动画才会开始执行(commit)
原文:http://blog.csdn.net/fucheng56/article/details/19805767