在UIImageView - iOS中加载动画图像

时间:2013-05-17 21:05:04

标签: ios objective-c uiimageview uiimage nsarray

我有大约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尝试过,但无法弄明白。

4 个答案:

答案 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的回答,了解不会在设备上崩溃的解决方案。