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

Xcode 6 как установить отдельные изображения @2x для устройств iPhone 5 и 6?

Я хочу указать разные фоновые изображения для iPhone на каждом устройстве. Как этот

iPhone 6 Plus   1242x2208 pixels    [email protected]
iPhone 6        750x1334  pixels    [email protected]
iPhone 5        640x1136  pixels    [email protected]
iPhone 4        640x960   pixels    [email protected]
iPhone 3GS      320x480   pixels    bg.png

В LaunchImage имеется опция для указания изображений для устройства Retina HD 4.7. Так что никаких проблем для запуска изображений.

enter image description here

В файле .xcassets у меня есть опция для 1x, 2x, Retina 4 2x и 3x. Но для устройства iPhone 6 (1334x750) нет опции.

enter image description here

Итак, как обеспечить 1334x750 px изображение для устройства iPhone 6? Поиск некоторого решения с использованием файла .xcassets, а не путем программной загрузки изображений для каждого устройства.

Я уже посетил связанные вопросы SO, но ни один из них не отвечает конкретно за изображения устройств iPhone 6.

Путаница разрешения iPhone 6 Plus: Xcode или веб-сайт Apple? для разработки

xcode 6 каталог активов iphone 6

4b9b3361

Ответ 1

установите ваше имя изображения следующим образом:

image-320 @2x//iPhone 5

image-375 @2x//iPhone 6

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width);
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth];
UIImage *image = [UIImage imageNamed:imageName];

Ответ 2

Images.xcassets имеет возможность предоставить отдельное изображение для iPhone 5 (Retina 4 @2x), iPhone 6 (@2x) и iPhone 6 плюс (3x).

enter image description here

У iPhone 4 нет возможности (возможно, яблоко останавливает поддержку iPhone 4), а для iPhone 4 требуется также 2x-изображения (режим масштабирования), но вы можете сделать что-то вроде Это сообщение для iPhone 4

Обновить Xcode 7

Нет опции для отдельного изображения с Image.xcassets теперь в Xcode 7. Мы должны использовать одинаковые изображения 2x для всех устройств Retina и 3x для устройства Retina HD.

Ответ 3

Если вы хотите явно делать разные вещи на разных устройствах, вам нужно сделать это в коде, например сказал Валар Моргулис.

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width);
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth];
UIImage *image = [UIImage imageNamed:imageName];

ИЛИ, вы можете использовать класс UIDevice для получения этой информации. Он имеет несколько методов с булевыми отходами, которые вы можете использовать для получения различной информации об устройстве:

[[UIDevice currentDevice] platform]
[[UIDevice currentDevice] hasRetinaDisplay]
[[UIDevice currentDevice] hasMultitasking]

ИЛИ, вы можете включить <sys/sysctl.h> и;

NSString *platform = [self platform];

if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";

так далее и т.д. Вы можете узнать о строках устройства в здесь.

Есть и другие способы сделать это программно, но пока нет явного способа сделать это в построителе интерфейса, о котором я знаю. Не стесняйтесь указывать на мои ошибки.