1

我的应用程序基本上由大约 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 属性进行动画处理)是否全错了?有没有更好的方法来实现这一点(例如,在一个单独的工具中创建动画,然后以某种方式导入这个动画)?我应该做些什么来提高性能?

非常感谢。

4

0 回答 0