Я загружаю два изображения из Интернета Apple.png и [email protected] Я хочу использовать [UIImage imageNamed: @ "Apple.png"], чтобы он мог использовать встроенные функции, чтобы определить, должен ли он отображаться либо Apple.png, либо [email protected](iPhone) Используйте внешнее изображение в UIImage imageNamed
Где я могу хранить эти изображения? В документации я прочел следующее:
Название файла. Если это при загрузке изображения, то метод ищет изображение с указанным именем в главном комплекте приложения .
Ах, поэтому основной комплект приложения - это путь. Вот как выглядит мой код:
NSString *directory = [[NSBundle mainBundle] bundlePath];
NSString *path = [directory stringByAppendingPathComponent:imageName];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager createFileAtPath:path contents:dataFetcher.receivedData attributes:nil];
Я проверил, был ли файл создан в папке пути, и это было правильно. Я также перетащил Example.png в файл проекта только для того, чтобы убедиться, что он был сохранен в той же папке, и это также было правильно.
Однако [UIImage imageNamed: @ "Apple.png"] по-прежнему не удается получить изображения. У кого-нибудь есть идея?
Edit:
Я сделал категорию для UIImage:
@implementation UIImage (ImageNamedExtension)
+ (UIImage *)imageNamed:(NSString *)name fromDirectory:(NSString *)directory {
NSString *name2x = [name stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@".%@", [name pathExtension]] withString:[NSString stringWithFormat:@"@2x.%@", [name pathExtension]]];
NSString *path = [directory stringByAppendingPathComponent:name];
NSString *path2x = [directory stringByAppendingPathComponent:name2x];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
if ([fileManager fileExistsAtPath:path2x]) {
return [UIImage imageWithContentsOfFile:path2x];
}
}
return ([fileManager fileExistsAtPath:path]) ? [UIImage imageWithContentsOfFile:path] : nil;
}
@end
Это сделал трюк eventualy. Спасибо всем за помощь.
+1 для форматирования кода. – WrightsCS
Вы не можете создавать файлы в своем основном пакете на iPhone. Симулятор может позволить вам это сделать, но устройство не будет/не должно. Если вы загружаете, вам придется поместить его в другое место. –
Ваша категория ломается, например, iPad (1-й ген), если используется только @ 2x (то есть 1x также потребуется). Вероятно, ломается и iPhone 3GS при тех же обстоятельствах. – Jonny