我有以下代码来用图像填充数组:
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对象?
我认为问题相当于"如何绕过自动@2x图像加载?"
你需要走一条它无法走的路。您可以使用NSData dataWithContentsOfFile:options:error:
将每个文件的内容传递给UIImage imageWithData:
。这样,imageWithData
就不知道数据来自哪里,更不用说有2x版本了。
我认为NSData技术应该有效,但您需要从捆绑包中获取路径,不能只将文件名作为字符串。
尝试:
filename = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Animation HD1.2 png sequence/HD1.2_%d.png", i] ofType:nil];
试试这个。。。
//This string will have @"@2x.png"
NSString *verificationString = [myString substringFromIndex:[myString length] - 7];
if(![verificationString isEqualToString:@"@2x.png"])
{
//NOT EQUAL...
}