2010-05-04 31 views
1

我正在为我的iPhone应用程序创建基本动画。我有两种不同类型的动画可供选择。我可以用这...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]; 

我有好几个,这些部件的动画,所以我要选择一个选项,使用最少量的内存并且最快速地运行。任何建议将是伟大的,谢谢

回答

0

在你的问题有很多变数来说明。它的大部分将取决于图像的大小和复杂程度以及动画运行的频率。我的直觉是使用API​​提供的转换将是最便宜的,但唯一真正的方法是告诉压力测试这两个动画,并看看哪些在你的情况下最好。

+0

感谢您的领导,这真的很有用。你会认为使用一个小的PNG和平铺它会更好地使用一个更大的单个PNG? – user157733 2010-05-04 15:41:45

0

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

0

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