在不使用MPMoviePlayer的情况下在iPhone上制作动画图像(如电影)的方法

Ewa*_*n D 2 iphone animation core-animation

我需要能够在静态图像上显示动画.

鉴于MPMoviePlayer无法控制任何有用的东西,我能想到的唯一方法就是使用多个静态图像,我们会逐一显示这些图像以创建"类似电影"的动画.

我知道我们可以使用UIImageView来执行此操作(通过设置UIImageView animationImages属性然后调用startAnimation),但是我们将在动画中拥有超过100个图像 - 因此内存使用量将最大化.

有没有人有任何好方法来做这种动画?使用Core Animation还是OpenGL?

我的猜测是我们需要创建一个图像缓冲区,当我们加载新图像时,我们会显示图像缓冲区中的图像?

Bra*_*son 6

您可以使用Core Animation CALayer来托管动画,并将一系列CALayer交换进出主图层以执行逐帧动画.您可以使用其contents属性将图像框架托管CALayer的内容设置为CGImageRef.可以根据需要创建包含图像的一系列CALayers并将其存储在NSMutableArray中,然后在完成时删除以最小化内存使用.

您可以通过在CATransaction中包装replaceSublayer:with:方法调用来设置帧之间的转换持续时间,如下所示:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.25f] // 1/4th of a second per frame
                 forKey:kCATransactionAnimationDuration];   
[mainLayer replaceSublayer:[imageLayers objectAtIndex:oldImageIndex] with:[imageLayers objectAtIndex:newImageIndex]];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

如果您的帧显示时间足够短,您也可以在主层的内容中交换进出CGImageRef.