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

Изображения для экрана сетчатки iphone 5

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

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

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

Спасибо!

4b9b3361

Ответ 1

Здесь кроме моего блога об этой теме:

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

Иногда это не имеет значения, например, значки и не полноэкранная графика, вероятно, одинаковы на iPhone 4 и 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, чтобы он автоматически загружал правильное изображение. Подробнее см. Ссылку ниже.

Подробнее: http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html

EDIT: @Sound Blaster и @GrizzlyNetch верны, в коде вы должны использовать imageNamed: @ "myImage-568h.png" ], но фактическое имя файла должно быть [email protected] Если вы этого не сделаете, шкала будет неправильной, как они сказали.

Ответ 2

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

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

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

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

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

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

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

Ответ 3

if ([UIScreen mainScreen].scale == 2.f & screenHeight == 568.0f) Точные сравнения чисел с плавающей точкой не являются хорошей идеей на любом языке из-за ошибок округления в том, как они хранятся в памяти. Например, вы не можете гарантировать, что 568.0f не сохраняется как 567.9999999 или 568.0000001. Гораздо безопаснее использовать диапазон, или в этом случае было бы достаточно screenHeight > 567.1f. Я подозреваю, что даже iPhone физически не поддерживает доли пикселей.

Ответ 4

ИЗМЕНИТЬ

BEWARE, начиная с iOS8 UIScreen учитывайте ориентацию (проверка высоты может вернуть два значения, высоту портрета или высоту ландшафта, прежде чем она будет только на высоте портрета), но xcassets лучше вы можете проверить здесь: Как добавить фона iphone?

END EDIT

На основе ответа ben-clayton я сделал удобную категорию для управления изображением для 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];
}

Ответ 5

В настоящее время я обнаруживаю, является ли текущее устройство 4-дюймовым iPhone таким образом, и он отлично работает. HTH

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