0

我有以下代码来用图像填充数组:

NSString *fileName;
    myArray = [[NSMutableArray alloc] init];
    for(int i = 1; i < 285; i++) {
        fileName = [NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i];
        [myArray addObject:[UIImage imageNamed:fileName]];
        NSLog(@"Loaded image: %d", i);
    }

在我的资源文件夹中,我有每个这些图像的@2x 版本。有没有办法(以编程方式)我可以忽略视网膜设备上的@2x 图像并用非@2x 图像填充阵列?

编辑1:

我编辑了我的代码以使用NSData

  myArray = [[NSMutableArray alloc] init];
    for(int i = 1; i < 285; i++) {
        fileName = [NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i];
        NSData *fileData = [NSData dataWithContentsOfFile:fileName];
        UIImage *regularImage = [UIImage imageWithData:fileData];
        [myArray addObject:regularImage];
    }

falling.animationImages = MYArray;

这使我的应用程序因错误而崩溃:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'。我使用 NSData 对象错了吗?

4

3 回答 3

3

我相信这个问题相当于“我如何绕过自动@2x 图像加载?”

你需要走一条它无法走的路。NSData dataWithContentsOfFile:options:error:您可以使用to传递每个文件的内容UIImage imageWithData:这样,imageWithData不知道数据来自哪里,更不用说有 2x 版本。

于 2012-09-08T14:51:48.543 回答
1

我认为 NSData 技术应该可以工作,但你需要从你的包中获取路径,你不能只将文件名作为这样的字符串给出。

尝试:

filename = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i] ofType:nil];
于 2012-09-08T18:03:54.280 回答
0

尝试这个...

//This string will have @"@2x.png"

NSString *verificationString = [myString substringFromIndex:[myString length] - 7];
if(![verificationString isEqualToString:@"@2x.png"]) 
{
    //NOT EQUAL...
}
于 2012-09-08T14:47:50.733 回答