CALayer的学习
1.CALayer不是UIResponder的子类,不能响应事件
2.非RootLayer的layer存在隐式动画,
3.rootlayer的layer不存在隐式动画,即使commit提交了也没有动画效果。
补充
根layer(rootLayer)类似于UIView中的一个layer层,非RootLayer层就是自己创建的layer层。
隐式动画test
- (void)viewDidLoad {
[super viewDidLoad];
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(0,0, 100, 100);
layer.backgroundColor = [UIColor redColor].CGColor;
layer.borderColor = [UIColor yellowColor].CGColor;
layer.shadowOpacity = 0.5;
layer.shadowColor= [UIColor blueColor].CGColor;
layer.borderWidth = 3;
layer.position = self.view.center;
layer.anchorPoint = CGPointMake(0.5, 1);
self.layer = layer;
[self.view.layer addSublayer:self.layer];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//设置非root Layer层的动画效果,默认为no;
[CATransaction setDisableActions:YES];
[CATransaction setAnimationDuration:1];
self.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.layer.frame = CGRectMake(0, 0, 200, 200);
self.layer.anchorPoint = CGPointMake(0.5, 0);
self.layer.cornerRadius = 50;
self.layer.shadowColor = [UIColor yellowColor].CGColor;
//提交非root Layer的动画效果
[CATransaction commit];
self.layer.position = CGPointMake(100, 0);
}
效果图:
补充
可以设置隐式动画关闭。当在设置隐式动画的动画效果时候,需要在提交的commit方法前面实现,否则,没有动画效果。如上面例子中的,在设置layer的position属性时候,没有提交上去,因此,效果图中的layer有一个瞬移的效果。
网友评论