使用UIImages的CAKeyframeAnimation无法工作

4
我正在这样设置动画:

我正在设置动画如下:

self.testAnimation = [CAKeyframeAnimation animationWithKeyPath:@"TestAnimation"];

[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c1.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c2.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c3.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c4.png"].CGImage];

[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.0f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.25f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.5f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.75f]];

self.testAnimation.values          = self.animationImagesAsCGImages;
self.testAnimation.keyTimes        = self.animationKeyframeTimings;

self.testAnimation.repeatCount     = HUGE_VALF;
self.testAnimation.autoreverses    = NO;
self.testAnimation.calculationMode = kCAAnimationDiscrete;
self.testAnimation.duration        = 2.0f;

然后这样调用:

[self.layer addAnimation:self.testAnimation forKey:@"TestAnimation"];

但是什么都没有显示出来。

我看到了几篇关于kCAAnimationDiscrete需要第一个时间为0.0f的Stack帖子,正如您所看到的那样。

请给予建议?


1
你能否添加初始化self.testAnimation值的代码? - Craig Siemens
真的吗?你真的需要看那个吗? - iOSProgrammingIsFun
1个回答

13

简述:将动画关键路径更改为contents,如下所示:

self.testAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];

为什么它不起作用

当你写 [CAKeyframeAnimation animationWithKeyPath:@"TestAnimation"]; 时,你尝试对一个不存在的图层属性 TestAnimation 进行动画,因此对该属性的任何更改都没有视觉效果。

animationWithKeyPath:addAnimation:forKey: 的区别

在创建动画和将动画添加到图层时,很容易忽略keyPathkey之间的差异。

创建新动画时,可以指定要动画化的属性的keyPath。如果没有设置keyPath,则可以使用动画的keyPath属性进行设置。

将动画添加到图层时,可以指定一个key。该key仅用于使用CALayer的animationForKey:方法访问动画。

如何使其正常运行

由于你正在向值中添加图像,我假设你想在图像之间进行动画,那么你应该使用contents属性作为关键路径。

contents属性的文档中可以看到:

提供图层内容的对象。可动画化。

...

您可以将此属性设置为CGImageRef,以代替图层内容呈现该图像的内容。


谢谢。我以为NSString是动画ID,而不是表示变化属性的内容。 - iOSProgrammingIsFun
1
现在遇到一个新问题,第四张图片(c4)没有显示... 唉! - iOSProgrammingIsFun
@iOSProgrammingIsFun 你能够显示第四张图片吗?我也遇到了类似的问题。最后一张图片无法显示。 - DancOfDeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接