我正在阅读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属性中添加子层并让动画作用于该层。
有人可以帮助解释我做错了什么吗?感谢。
答案 0 :(得分:3)
您正在创建一个没有内容的全新图层并为其添加动画。有两个问题:
frame
或其bounds
来使其大于0×0。图层没有可以使其可见的内容或其他属性。有很多方法可以让它可见。一种方法是设置其背景颜色。例如:
thelayer.backgroundColor = UIColor.redColor.CGColor;
此外,将动画添加到图层时,通常应使用动画属性名称作为键。例如:
[thelayer addAnimation:goRight forKey:@"position"];
如果您想学习核心动画,我强烈建议您观看WWDC videos。 WWDC 2010有两个视频,实践中的核心动画第1部分和第2部分.WDDC 2011中有一个视频 Core Animation Essentials 。