如何忽略@ 2x图像

时间:2012-09-08 14:35:01

标签: iphone objective-c ios ipad

我在下面的代码中用图像填充数组:

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对象错了吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

尝试:

filename = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i] ofType:nil];

答案 2 :(得分:0)

试试这个......

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

NSString *verificationString = [myString substringFromIndex:[myString length] - 7];
if(![verificationString isEqualToString:@"@2x.png"]) 
{
    //NOT EQUAL...
}