一 概述
- CALayer隐式动画
- CALayer隐式动画的事务操作
二 隐式动画
2.1 根层
- 每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根层)
- 所有的非Root Layer,也就是手动创建CALayer对象,都存在着隐式动画
2.2 什么是隐式动画
- 当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果
- 而这些属性称为Animatable Properties(可动画属性)
2.3 几个常见的Animatable Properties
- Bounds:用于设置CALayer的宽度和高度。修改这个属性会产生缩放动画
- backgroundColor:用于设置CALayer的背景色。修改这个属性会产生背景色的渐变动画
- Position:用于设置CALayer的位置。修改这个属性会产生平移动画
三 隐式动画的事务操作
可以通过动画事务[CATransaction]关闭默认的隐式动画效果
1 2 3 4
| [CATransaction begin]; [CATransaction setDisableActions:YES]; self.myview.layer.position=CGPointMake(10,10); [CATransaction commit];
|
四 示例
4.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #import "ViewController.h"
@interface ViewController ()
@property (nonatomic,weak) CALayer *layer;
@end
@implementation ViewController
- (void)viewDidLoad { [super viewDidLoad]; CALayer *layer=[CALayer layer]; _layer=layer; //设置尺寸 layer.bounds=CGRectMake(0, 0, 100, 100); //颜色 layer.backgroundColor=[UIColor redColor].CGColor; [self.view.layer addSublayer:layer]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch=[touches anyObject]; CGPoint pos=[touch locationInView:self.view]; //开启事务 [CATransaction begin]; //取消隐式动画 [CATransaction setDisableActions:YES]; _layer.borderWidth=arc4random_uniform(5)+1; CGFloat r=arc4random_uniform(256)/255.0; CGFloat g=arc4random_uniform(256)/255.0; CGFloat b=arc4random_uniform(256)/255.0; _layer.backgroundColor=[UIColor colorWithRed:r green:g blue:b alpha:1].CGColor; _layer.cornerRadius=arc4random_uniform(50); _layer.position=pos; //_layer.position=CGPointMake(100, 100); //提交事务 [CATransaction commit]; }
@end
|
4.2 效果图