Xcode 7, каталог ресурсов универсальная поддержка устройства фоновое изображение?

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

Это лучший пост, который я нашел, но в Xcode 7 он не показывает "Retina 4 2x" или iPhone 6 / 6+.

Xcode 6 - xcassets для универсальной поддержки изображений

В xcode 7 есть универсальная опция, но эти три изображения не поддерживают устройства всех размеров.

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

Как использовать xcassets/ универсальные фоновые изображения для разных iPhone /iPad?

РЕДАКТИРОВАТЬ: Похоже, мне, возможно, придется пойти по маршруту без каталога активов:(

A)

Я хотел бы в будущем проверить это решение, чтобы оно отступало и, если необходимо, изменило размер наиболее подходящего изображения, поскольку я не уверен, что это произойдет.

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

B)

Или, может быть, этот код лучше? Хотя я не уверен, к каким размерам это относится, он также немного устарел, поскольку не поддерживает изображения x3?

#import <UIKit/UIKit.h>

@interface UIImage (DefaultImage)

// uses statusbar orientation
+ (UIImage *)defaultImage;

//uses given orientation
+ (UIImage *)defaultImageForOrientation:(UIInterfaceOrientation)orient;

@end

@implementation UIImage (DefaultImage)

+ (UIImage *)defaultImage {
    return [self defaultImageForOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
}

+ (UIImage  *)defaultImageForOrientation:(UIInterfaceOrientation)orient {
    // choose the correct launch image for orientation, device and scale
    NSMutableString *launchImageName = [[NSMutableString alloc] initWithString:@"Default"];
    BOOL isPad = ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad );
    if ( isPad ) {
        BOOL isLandscape = UIInterfaceOrientationIsLandscape(orient);
        NSString *imageOrientation = (isLandscape) ? @"Landscape" : @"Portrait";

        BOOL isRetina = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0);
        NSString *scaleString = (isRetina) ? @"@2x" : @"";

        // Default-Landscape~ipad.png
        // Default-Landscape@2x~ipad.png
        // Default-Portrait~ipad.png
        // Default-Portrait@2x~ipad.png
        launchImageName = [NSMutableString stringWithFormat:@"%@-%@%@.png", launchImageName, imageOrientation, scaleString];       
    } else {
        if ( CGRectGetHeight([UIScreen mainScreen].bounds) > 480.f) {
            // Default-568h.png
            launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName];
        } else {
            // Default.png
            // Default@2x.png
            launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName];
        }
    }
    return [UIImage imageNamed:launchImageName];
}

@end

Отказ от ответственности: взято с https://github.com/Daij-Djan/DDUtils

C)

Это также выглядит хорошо, но оно изменяет размеры и не использует настоящие резкие изображения, и откатов нет.

https://gist.github.com/kevindelord/fe2e691d06ab745fbb00

NSString *extension = @"";      // iPhone 3GS and earlier
if (scale == 3.f) {
    extension = @"@3x";         // iPhone 6 Plus
} else if (scale == 2.f && h == 568.0f && w == 320.0f) {
    extension = @"-568h@2x";    // iPhone 5, 5S, 5C
} else if (scale == 2.f && h == 667.0f && w == 375.0f) {
    extension = @"-667h@2x";    // iPhone 6
} else if (scale == 2.f && h == 480.0f && w == 320.0f) {
    extension = @"@2x";         // iPhone 4, 4S
} else if (scale == 1.f && h == 1024.0f && w == 768.0f) {
    extension = @"-512h";       // iPad Mini, iPad 2, iPad 1
} else if (scale == 2.f && h == 1024.0f && w == 768.0f) {
    extension = @"-1024h@2x";   // iPad Mini 3, iPad Mini 2, iPad Air, iPad Air 2
}
return extension;

1 ответ

Я просто изменил файл Contents.json и добавил Retina 4 2x:

{
      "idiom" : "iphone",
      "filename" : "home-bgimage-iphone5@2x.png",
      "subtype" : "retina4",
      "scale" : "2x"
}

И Retina 4 2x снова появилась в каталоге активов для этого набора изображений:)

Чтобы предоставить различные изображения для iPhone и iPad, вам просто нужно установить флажки iPhone и iPad в разделе "Устройства" и отменить выбор "Универсальный".

Однако я до сих пор не знаю, как обращаться с iPhone 6. У меня всегда был другой набор изображений для iPhone 6 с одним изображением, и я проверил код, если устройство имитирует iPhone6 ​​или iPhone6, и вместо этого установил это изображение.

Другие вопросы по тегам