我的应用程序基本上由大约 30 个全尺寸图像组成,这些图像同时具有动画效果。许多图像是透明或半透明的,并覆盖在其他图像之上。
动画很简单(主要是重复的不透明度变化),通常是 CAKeyframeAnimation 类型。这是一个典型动画的例子。
首先,我按如下方式加载图像:
UIImage *layerImage = [UIImage imageNamed:baseImageName];
CGImageRef image = [layerImage CGImage];
layerToAdd.opacity = 0;
[layerToAdd setContents:(__bridge id)image];
[self.view.layer addSublayer:layerToAdd];
然后我添加动画:
CAKeyframeAnimation *layerAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
layerAnimation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:0.9],
[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:0], nil];
layerAnimation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:0.750],
[NSNumber numberWithFloat:0.756],
[NSNumber numberWithFloat:0.759],
[NSNumber numberWithFloat:1], nil];
layerAnimation.duration = 60;
layerAnimation.repeatCount = HUGE_VALF;
[layer addAnimation:layerAnimation forKey:@"WC3d"];
它在模拟器上似乎表现不错,但是当我添加一个新层时,我在位置上进行动画处理时,很明显该特定动画非常不稳定。作为测试,我随后删除了所有基于不透明度的动画,并注意到位置动画变得平滑。
那么,我的动画方法(即,将图像加载到图层中,然后主要根据该图层的 opacity 属性进行动画处理)是否全错了?有没有更好的方法来实现这一点(例如,在一个单独的工具中创建动画,然后以某种方式导入这个动画)?我应该做些什么来提高性能?
非常感谢。