Подтвердить что ты не робот

Использовать изображения 2x 2x для ipad в универсальном приложении? и яблоко предпочитает собственные приложения?

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

Мои вопросы -

  • Я знаю, что -

      [UIImage imageNamed:@"blabla"]
    

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

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

Возможно ли это?

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

спасибо

Шани

4b9b3361

Ответ 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:).