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
Ответы
Ответ 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)";
так далее и т.д. Вы можете узнать о строках устройства в здесь.
Есть и другие способы сделать это программно, но пока нет явного способа сделать это в построителе интерфейса, о котором я знаю. Не стесняйтесь указывать на мои ошибки.