CoreAnimation CABasicAnimation,何时添加图层

时间:2012-01-27 03:41:21

标签: iphone core-animation

我正在阅读Apple关于CA的文档,我正在尝试做一个简单的动画。我想知道为什么这不起作用:

CABasicAnimation *goRight = [CABasicAnimation animationWithKeyPath:@"position"];
goRight.duration = 5;
goRight.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
NSLog(@":%@", [goRight.fromValue description]);
goRight.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
CALayer *thelayer = [CALayer layer];
[thelayer addAnimation:goRight forKey:nil];
[self.aView.layer addSublayer:thelayer];

但如果我将最后几行更改为:

//    CALayer *thelayer = [CALayer layer];
//    [thelayer addAnimation:goRight forKey:nil];
//    [self.aView.layer addSublayer:thelayer];
    [self.aView.layer addAnimation:goRight forKey:nil];
这是有效的。我以为我在某处读到了.layer属性上的隐式或显式动画都没有了所以我认为我应该在主要.layer属性中添加子层并让动画作用于该层。

有人可以帮助解释我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:3)

您正在创建一个没有内容的全新图层并为其添加动画。有两个问题:

  1. 默认情况下,图层的大小为0×0,您不会更改其大小。您需要通过设置frame或其bounds来使其大于0×0。
  2. 图层没有可以使其可见的内容或其他属性。有很多方法可以让它可见。一种方法是设置其背景颜色。例如:

    thelayer.backgroundColor = UIColor.redColor.CGColor;
    
  3. 此外,将动画添加到图层时,通常应使用动画属性名称作为键。例如:

    [thelayer addAnimation:goRight forKey:@"position"];
    

    如果您想学习核心动画,我强烈建议您观看WWDC videos。 WWDC 2010有两个视频,实践中的核心动画第1部分和第2部分.WDDC 2011中有一个视频 Core Animation Essentials