2012-09-08 57 views
0

下面我有以下代碼來填充陣列圖像:如何忽略@ 2倍的圖像

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); 
    } 

在我的資源文件夾中,我有@這些圖像的2個版本。有沒有辦法(編程)我可以忽略視網膜設備上的@ 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對象是否錯誤?

+0

會發生什麼? – Adam

+0

這將工作正常,但我不想刪除它們 – garethdn

回答

3

我相信這個問題會導致「我如何跳過自動@ 2X圖像加載?」

您需要走一條它不能遵循的路徑。您可以使用NSData dataWithContentsOfFile:options:error:將每個文件的內容傳遞給UIImage imageWithData:。這樣,imageWithData將不知道數據來自何處,更不用說有2x版本。

+0

這正是問題所在。我現在就試試看,然後回來...... – garethdn

+0

我編輯過OP。應用程序崩潰時,我嘗試將圖像添加到數組中,指出對象爲零。 – garethdn

+1

您可能需要一個完整路徑。假設它在你的應用程序包中,使用'[[NSBundle mainBundle] pathForResource:]'來獲取它。 –

0

嘗試......

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

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

'isEqualTo'不是一個有效的選擇器。你能告訴我相應的嗎?我有一種感覺,這將簡單地加載沒有圖像到數組... – garethdn

+0

[verificationString isEqualToString:@「@ 2x.png」] –

1

我認爲NSData技術應該可以工作,但是您需要從您的包中獲取路徑,您不能只將文件名作爲像這樣的字符串。

嘗試:如果你只是刪除它們

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