Использовать @ 2x изображения сетчатки для Ipad в универсальном приложении? а Apple предпочитает нативные приложения? - PullRequest
12 голосов
/ 23 февраля 2011

Я знаю, что были некоторые обсуждения по этому поводу, но я не смог найти хороший ответ?

Мои вопросы -

  1. Я знаю, что -

      [UIImage imageNamed:@"blabla"]
    

будет автоматически искать правильное изображение для отображения (сетчатки или нет) на iPhone.

У меня есть универсальное приложение, и я хочу использовать версии @ 2x наIpad, поэтому мне не нужно загружать другую версию изображений (у меня есть сотни маленьких изображений).

это возможно?

  • В некоторых местах я видел, как люди писали, что яблоко не поощряет универсальные приложения, так как оно предпочитает создавать отдельные приложения для iPhone и iPad?Это правильно, даже когда я создаю отдельный интерфейс для каждого?

спасибо

Шани

Ответы [ 4 ]

66 голосов
/ 09 марта 2012

Если вы загружаете изображение с именем «image», пути поиска, вероятно, будут такими же, как и всегда:

iPhone:

  • 1) image@2x~iphone.png (только сетчатка)
  • 2) image@2x.png (только сетчатка)
  • 3) image ~ iphone.png
  • 4) image.png

IPad:

  • 1) image@2x~ipad.png (только сетчатка)
  • 2) image@2x.png (только сетчатка)
  • 3) image ~ ipad.png
  • 4) image.png
17 голосов
/ 23 февраля 2011

Нет хорошего встроенного способа не дублировать изображения сетчатки 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"]
3 голосов
/ 22 декабря 2011

Я улучшил ответ Богатыря, проверив, существует ли изображение сетчатки. Вероятно, это не слишком необходимо, но я нашел это полезным при тестировании, поэтому я могу просто создать один файл изображения.

+ (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]];
}
0 голосов
/ 11 октября 2011

Возможно, вы сможете скопировать все ресурсы изображений image@2x.png в изображение ~ ipad.png.Будьте осторожны с делом "~ ipad.png".Но вам нужно вручную управлять растянутым изображением с помощью Cap (stretchableImageWithLeftCapWidth: topCapHeight:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...