iPhone上的动画 - 使用图像序列还是旋转?

时间:2010-05-04 08:32:09

标签: iphone animation uiimageview commitanimations

我正在为我的iPhone应用程序创建基本动画。我可以选择制作两种不同类型的动画。我可以用这个...

NSArray *myImages = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"myImage1.png"], 
[UIImage imageNamed:@"myImage2.png"], 
[UIImage imageNamed:@"myImage3.png"], 
[UIImage imageNamed:@"myImage4.gif"], nil]; 

UIImageView *myAnimatedView = [UIImageView alloc]; 
[myAnimatedView initWithFrame:[self bounds]]; 
myAnimatedView.animationImages = myImages; 
myAnimatedView.animationDuration = 0.25;  
[self addSubview:myAnimatedView]; 
[myAnimatedView release];

或类似的东西......

    [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:1.5];
 // other animations goes here
 myImage.transform = CGAffineTransformMakeRotation(M_PI*0.5);
 // other animations goes here
 [UIView commitAnimations];

我有很多这些部分要动画,所以我想选择一个使用最少内存并且最快的选项。任何建议都会很棒,谢谢

3 个答案:

答案 0 :(得分:0)

您的问题中有很多变量需要考虑。其中很大程度上取决于图像的大小和复杂程度以及动画运行的频率。我的预感是使用API​​提供的变换将是最便宜的,但唯一真正的方法是对两种动画进行压力测试,看看哪种情况在你的情况下保持最佳状态。

答案 1 :(得分:0)

我会混合:从动画代码生成静止图像并将图层保存到CGImages。

答案 2 :(得分:0)

因此,您需要考虑的根本问题是您希望一次在内存中有多少帧动画。如果您使用animationImagesArray或一个巨大的图像与所有帧在一个中,则无关紧要。将解码后的图像数据保存在内存中会占用大量空间,您可以使用它来获取少量小图像,但是您可以轻松编写一些代码,这些代码会因为耗尽所有内存而导致设备崩溃。请参阅我关于此特定问题的博客文章video-and-memory-usage-on-ios-devices。编写代码的更好方法是不要同时在内存中保存所有已解码的视频帧(UIImages或CGImageRefs)。