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

Название нового изображения для iPhone 5

С сетчаткой мы делаем изображения с именем @2x в имени. Я вижу, где изображение по умолчанию должно быть по умолчанию - 568h @2x, но это не похоже на другие изображения. Например, если у меня есть bg.png и [email protected], я попытался использовать [email protected], но это не работает. Может кто-нибудь сказать мне, какие изображения нужно назвать для поддержки iPhone 5?

4b9b3361

Ответ 1

Нет конкретного имени изображения. Когда Default-568h @2x запустит это изображение на iPhone 5 или iPod Touch 5G и включит режим без буквы. После этого вам нужно разработать свои представления, чтобы они были гибкими. Нет специального "имени изображения" или чего-то нового для нового размера.

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

Ответ 2

Отсутствует специальный суффикс для iPhone 5 (4 ''), только конкретный файл [email protected]

Вот макрос для его обработки:

// iPhone 5 support
#define ASSET_BY_SCREEN_HEIGHT(regular, longScreen) (([[UIScreen mainScreen] bounds].size.height <= 480.0) ? regular : longScreen)

Использование: (имена активов - image.png, [email protected], [email protected])

myImage = [UIImage imageNamed:ASSET_BY_SCREEN_HEIGHT(@"image",@"image-568h")];

Ответ 3

iPhone 5 не имеет разной плотности пикселей, это тот же сетчатый дисплей PPI, что и iPhone 4/4S, это просто другой размер экрана. Изображения @2x будут использоваться на iPhone 5, а также 4/4S.

Ответ 4

Чтобы закончить Jason answser, я бы предложил: как насчет переопределения метода UIImage imageNamed:, чтобы он имел суффикс -568 для имени вашего изображения? Или добавьте новый метод под названием resolutionAdaptedImageNamed: в UIImage, возможно, используя категорию.

Если у меня будет немного времени в следующие дни, я постараюсь отправить код для этого.

Внимание: не будет работать для изображений в файлах Nib.

Ответ 5

Если вы используете Xcode 5, вы можете использовать каталог активов (см. использование документация Apple)

Как только ваш каталог активов будет создан, [ UIImage imagedNamed: @"your_image_set" ] вытащит правильное изображение на основе устройства.

Ответ 6

Вы также можете создать категорию для этой категории, как показано ниже.

UIImage+Retina4.h
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
 @interface UIImage (Retina4)
 @end

UIImage+Retina4.m
#import "UIImage+Retina4.h"
static Method origImageNamedMethod = nil;
@implementation UIImage (Retina4)

+ (void)initialize {
origImageNamedMethod = class_getClassMethod(self, @selector(imageNamed:));
method_exchangeImplementations(origImageNamedMethod,
                               class_getClassMethod(self, @selector(retina4ImageNamed:)));
}
+ (UIImage *)retina4ImageNamed:(NSString *)imageName {
// NSLog(@"Loading image named => %@", imageName);
NSMutableString *imageNameMutable = [imageName mutableCopy];
NSRange retinaAtSymbol = [imageName rangeOfString:@"@"];
if (retinaAtSymbol.location != NSNotFound) {
    [imageNameMutable insertString:@"-568h" atIndex:retinaAtSymbol.location];
} else {
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
        NSRange dot = [imageName rangeOfString:@"."];
        if (dot.location != NSNotFound) {
            [imageNameMutable insertString:@"[email protected]" atIndex:dot.location];
        } else {
            [imageNameMutable appendString:@"[email protected]"];
        }
    }
}

NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"];
if (imagePath) {
    return [UIImage retina4ImageNamed:imageNameMutable];
} else {
    return [UIImage retina4ImageNamed:imageName];
}
return nil;
}

@end

И вы можете напрямую проверить, используя импорт этой категории, как показано ниже, где вы хотите проверить 568 или обычное изображение

imgvBackground.image=[UIImage imageNamed:@"bkground_bg"];//image name without extantion