我有大约300张图片要加载动画,图片名为loading001.png, loading002.png, loading003.png, loading004.png………loading300.png
我是按照以下方式进行的。
.h文件
#import <UIKit/UIKit.h>
@interface CenterViewController : UIViewController {
UIImageView *imgView;
}
@end
.m文件
@implementation CenterViewController
- (void)viewDidLoad {
[super viewDidLoad];
imgView = [[UIImageView alloc] init];
imgView.animationImages = [[NSArray alloc] initWithObjects:
[UIImage imageNamed:@"loading001.png"],
[UIImage imageNamed:@"loading002.png"],
[UIImage imageNamed:@"loading003.png"],
[UIImage imageNamed:@"loading004.png"],
nil];
}
- (IBAction)startAnimation:(id)sender{
[imgView startAnimating];
}
@end
是否有一种将图像加载到数组中的有效方法。
我曾用for loop
尝试过,但无法弄明白。
答案 0 :(得分:16)
您可以尝试使用以下代码以更好的方式将图像加载到数组中
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *imgListArray = [NSMutableArray array];
for (int i=1; i <= 300; i++) {
NSString *strImgeName = [NSString stringWithFormat:@"loading%03d.png", i];
UIImage *image = [UIImage imageNamed:strImgeName];
if (!image) {
NSLog(@"Could not load image named: %@", strImgeName);
}
else {
[imgListArray addObject:image];
}
}
imgView = [[UIImageView alloc] init];
[imgView setAnimationImages:imgListArray];
}
答案 1 :(得分:3)
有一种更简单的方法可以做到这一点。你可以简单地使用:
[UIImage animatedImageNamed:@"loading" duration:1.0f]
其中1.0f
是动画所有图像的持续时间。为此,您的图像必须如下命名:
loading1.png
loading2.png
.
.
loading99.png
.
.
loading300.png
即没有用0填充。
从iOS 5.0开始,可以使用函数animatedImageNamed
。
答案 2 :(得分:2)
根据图像的大小,300图像动画序列可能非常耗费内存。使用电影可能是更好的解决方案。
答案 3 :(得分:2)
您的代码在设备上运行时会崩溃,因此无法将这么多图像解压缩到iOS上的内存中。您将获得内存警告,然后您的应用程序将被操作系统杀死。请参阅我对how-to-do-animations-using-images-efficiently-in-ios的回答,了解不会在设备上崩溃的解决方案。