iOS CALayer/隐式动画

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 *)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有一个瞬移的效果。


你可能感兴趣的:(iOS CALayer/隐式动画)