Вопрос по retina-display, iphone, iphone-5 – Изображения для дисплея iPhone 5 Retina

19

Выпущен iPhone 5 с новым размером экрана и разрешением.

Когда мы использовали изображения для iPhone 4 (сетчатка), мы просто добавили & quot; @ 2x & quot; на имя изображения. Кто-нибудь может сказать мне, можно ли добавлять новые изображения (фоны, кнопки и т. Д.) Для нового экрана iPhone?

И второй вопрос: могу ли я иметь в своем приложении отдельные файлы XIB: для старого iPhone, для нового iPhone (например, для iPhone и iPad)?

Спасибо!

Вы должны разделить разные вопросы на разные вопросы. Jeff Kelley

Ваш Ответ

5   ответов
1

ВНИМАНИЕ, начиная с UIScreen iOS8 учитывайте ориентацию (проверка высоты может вернуть два значения: высоту портрета или высоту ландшафта, прежде чем это была только высота портрета), но xcassets лучше, вы можете проверить здесь: Как добавить фон iPhone?

КОНЕЦ РЕДАКТИРОВАНИЯ

Основываясь на ответе Бен-Клейтона, я создал удобную категорию для управления имиджем для iPhone 5. Спасибо.

+ (UIImage *) imageForName:(NSString *)imageName
{
    NSString *result = imageName;

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    BOOL isIphoneFive = ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f);

    if (isIphoneFive)
    {
        NSString *imageNameWithoutExtension = [imageName stringByDeletingPathExtension];
        NSString *extension = [imageName pathExtension];

        result = [NSString stringWithFormat:@"%@-568h.%@",imageNameWithoutExtension, extension];
    }

    return [UIImage imageNamed:result];
}
50

[UIImage imageNamed:] автоматически загружает @ 2x версии изображений при работе на устройстве Retina. К сожалению, imageNamed: НЕ будет автоматически загружать -568h @ 2x версий изображений при работе на iPhone 5.

Иногда это не имеет значения, например значки и неполноэкранная графика, вероятно, одинаковы на iPhone 4 & amp; 5. Однако, если у вас полноэкранные фоновые изображения или полноэкранные фоновые изображения для панелей инструментов и т. Д., У вас будут проблемы. Ваши изображения высотой 480, скорее всего, будут растянуты (и, возможно, в результате будут выглядеть ужасно).

Вы можете вручную проверить размер экрана и загрузить нужное изображение следующим образом:

UIImage* myImage;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
   myImage = [UIImage imageNamed:@"myImage-568h.png"];
} else {
   myImage = [UIImage imageNamed:@"myImage.png"];
}

Есть способ изменить UIImage imageNamed такdoes автоматически загрузить нужное изображение. Смотрите ссылку ниже для деталей.

Больше на:http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html

РЕДАКТИРОВАТЬ: @Sound Blaster & amp; @GrizzlyNetchare правильно, в коде вы должны использовать imageNamed: @ & quot; myImage-568h.png & quot;] ноactual file name должно быть [email protected] Если вы этого не сделаете, то шкала неверна, как они и сказали.

Я думаю, правильное имя изображения - "myImage-568h.png". - без @ 2x
@GrizzlyNetch Протестировав это еще немного, вы правы. Файл должен называться [email protected], но в коде вы должны сказать myImage-568h.png. Обновил мой ответ.
Другое решение можно найти здесьangelolloqui.com/blog/20-iPhone5-568h-image-loading
Вы можете называть его как хотите ... -568 @ 2x или -568 или -568h ... Просто у вас есть только один ... нет -568 и -568 @ 2x одновременно, Я думаю, это то, что Бен пытался сказать. В конце концов, между вами и дизайнерами заключается соглашение об именовании.
2Ben: Я согласен с Sound Blaster, что суффикс @ 2x не должен быть там. Это потому, что вызов его с суффиксом не инициализирует правильный масштаб изображения для отображения сетчатки (imageNamed проверяет, существует ли файл с суффиксом, и если он есть, он загружает изображение из файла и устанавливает масштаб = 2). Просто попробуйте запустить NSLog (@ & quot;% f & quot ;, [UIImage imageNamed: & quot; Default.png & quot;]. Scale); и NSLog (@ & quot;% f & quot ;, [UIImage imageNamed: @ & quot; [email protected]"]. scale) на устройстве / симуляторе сетчатки и вы должны увидеть результаты.
1

screenHeight == 568.0f) Точное сравнение чисел с плавающей запятой не является хорошей идеей ни на одном языке из-за ошибок округления при хранении в памяти. Например, вы не можете гарантировать, что 568.0f не хранится как 567.9999999 или 568.0000001. Намного безопаснее использовать диапазон, или в этом случае было бы достаточно для screenHeight & gt; 567.1f. Я подозреваю, что даже iPhone физически не поддерживает доли пикселей.

Но, к счастью, на практике все не так странно, как вы их делаете. Если использовать один и тот же компилятор на той же платформе, я почти уверен, что 568.0 одинаков во всех представлениях, если только он не зависит от различных других операций. Подумайте об этом, где-то в памяти высота iPhone объявляется и возвращается в ваше приложение. Там в память ставят 568.0, а потом сравнивают с 568.0. Они используют XCode / GCC, вы используете одно и то же, так как один и тот же компилятор может поместить туда разные биты?
11

поэтому вы можете просто использовать все изображения сетчатки, которые вы использовали ранее.

Все, что вам нужно для поддержки нового разрешения iPhone 5, - это сделать так, чтобы ваши взгляды появлялись в окне. Для большинства видов, таких как tableview и scrollview, это не представляет никаких проблем.

Также нет необходимости добавлять дополнительные файлы XIB для нового разрешения, что также не поддерживается.

Просто добавьте[email protected] к вашему пакету приложений, чтобы iOS 6 заставляла ваше приложение занимать дополнительное пространство, доступное в iPhone 5.

Все нативные элементы управления, такие как панель вкладок, будут вести себя так, как вы ожидаете.

Если вы хотите поддерживать iOS4.3 и 5. * в своем приложении, убедитесь, чтоUse Autolayout в настройке пера (первая вкладка в конструкторе интерфейсов) отключена.

Затем убедитесь, что вы правильно настроили видautoresizingMask

0

является ли текущее устройство 4 " я, телефон таким образом, и он прекрасно работает. НТН

- (BOOL)isiPhone5{
    return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0);
}

Похожие вопросы