Использовать изображения 2x 2x для ipad в универсальном приложении? и яблоко предпочитает собственные приложения?
Я знаю, что были некоторые дискуссии об этом, но я не мог найти хороший ответ?
Мои вопросы -
будет автоматически искать правильное изображение для отображения (сетчатки или нет) на iPhone.
У меня есть универсальное приложение, и я хочу использовать версии @2x на ipad, поэтому мне не придется загружать другую версию изображений (у меня есть сотни небольших изображений).
Возможно ли это?
- В некоторых местах я видел, что люди писали, что яблоко обескураживает универсальные приложения, поскольку он предпочитает создавать отделенные приложения для iPhone и iPad? это правильно, даже когда я создаю другой интерфейс для каждого?
спасибо
Шани
Ответы
Ответ 1
Нет хорошего встроенного способа не дублировать изображения resina для iPhone с высоким разрешением для iPad. Вы можете написать собственное расширение или подкласс UIImage, который использует макрос idiom интерфейса пользователя, чтобы определить вашу платформу, затем автоматически добавьте "@2x" к имени изображения:
+ (UIImage *) imageNamedSmart:(NSString *)name
{
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
return [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", name]];
}
и вы бы назвали это следующим образом:
[UIImage imageNamedSmart:@"myImage"]
Ответ 2
Если вы загружаете изображение с именем "изображение", пути поиска, вероятно, будут такими же, как они были всегда:
iPhone:
IPad:
Ответ 3
Я улучшил ответ Богатыра, проверив, существует ли изображение сетчатки. Наверное, не слишком необходимо, но я счел это полезным при тестировании, поэтому я могу просто создать один файл изображения.
+ (UIImage *) imageNamedSmart:(NSString *)name {
NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
NSString *retinaFileName = [NSString stringWithFormat:@"%@@2x", name];
NSString *filePath = [[NSBundle mainBundle] pathForResource:retinaFileName ofType:@"png"];
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [fileManager fileExistsAtPath:filePath]) {
return [UIImage imageNamed:[retinaFileName stringByAppendingString:@".png"]];
}
return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", name]];
}
Ответ 4
Возможно, вы можете дублировать все ресурсы изображений [email protected] для изображения ~ ipad.png.
Будьте внимательны к случаю "~ ipad.png".
Но вам нужно вручную управлять растянутым изображением с помощью Cap (stretchableImageWithLeftCapWidth: topCapHeight:).