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