CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务.
隐式动画是通过隐式事务实现动画的,显式动画有多种实现方式,显式事务是其中一种实现显式动画的方式。
隐式事务
除显式事务外,任何对于 CALayer 属性的修改,都是隐式事务.这样的事务会在 RunLoop 中被提交.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| - (void)viewDidLoad { layer=[CALayer layer]; layer.bounds = CGRectMake(0, 0, 200, 200); layer.position = CGPointMake(160, 250); layer.backgroundColor = [UIColor redColor].CGColor; layer.borderColor = [UIColor blackColor].CGColor; layer.opacity = 1.0f; [self.view.layer addSublayer:layer]; [super viewDidLoad]; }
-(IBAction)changeLayerProperty { layer.cornerRadius = (layer.cornerRadius == 0.0f) ? 30.0f : 0.0f; layer.opacity = (layer.opacity == 1.0f) ? 0.5f : 1.0f; }
|
显式事务
在你修改图层树之前,可以通过给 CATransaction 类发送一个 begin 消息来创建一个显式事务,修改完成之后发送 comit 消息。
显式事务在同时设置多个图层的属性的时候(例如当布局多个图层的时候),暂时的禁用图层的动画,或者暂时修改动画的时间的时候非常有用。
一般使用
1 2 3 4 5 6
| [CATransaction begin]; [CATransaction setDisableActions:YES]; self.layer.position = CGPointMake(100, 100); self.layer.opacity = 0.5; [CATransaction commit];
|
如何禁用图层(非根层)行为
1 2 3 4 5 6 7
| [CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [aLayer removeFromSuperlayer]; [CATransaction commit];
另一种禁用图层行为的方法是 [CATransaction setDisableActions:_swich.on];这种方法控制区直到函数的结束
|
设置重载隐式动画的时间
你可以暂时改变响应改变图层属性的动画的时间,通过设置事务的kCATransactionAnimationDuration 键的值为新的时间。事务范围内所产生的任何动画都会使用该新设置的时间值而不是他们原有的值。
1 2
| [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
|
注意:非根层图层才能用 CATransaction 修改这些属性。