Avec la rétine, nous créons des images avec le @ 2x dans le nom. Je vois où l'image par défaut doit être default-568h @ 2x, mais cela ne semble pas être le cas pour les autres images. Comme si mes antécédents étaient bg.png et [email protected], j'ai essayé d'utiliser [email protected] mais cela ne fonctionnait pas. Quelqu'un peut-il me dire quelles sont les images à nommer pour prendre en charge l'iPhone 5?
Il n'y a pas de nom d'image spécifique. Avoir Default-568h @ 2x lancera cette image sur un iPhone 5 ou un iPod Touch 5G et activera le mode sans boîte aux lettres. Après cela, vous devez concevoir vos vues de manière flexible. Il n'y a pas de "nom d'image" spécial ou quoi que ce soit pour la nouvelle taille.
Pour votre arrière-plan, par exemple, vous devriez probablement utiliser une image capable d’être étirée ou pavée et la configurer correctement avant de la définir.
Pas de suffixe spécial pour iPhone 5 (écran 4 ''), juste le fichier spécifique [email protected].
Voici une macro pour le gérer:
// iPhone 5 support
#define ASSET_BY_SCREEN_HEIGHT(regular, longScreen) (([[UIScreen mainScreen] bounds].size.height <= 480.0) ? regular : longScreen)
Utilisation: (noms d’actifs - image.png, [email protected], [email protected])
myImage = [UIImage imageNamed:ASSET_BY_SCREEN_HEIGHT(@"image",@"image-568h")];
l'iPhone 5 n'a pas une densité de pixels différente, c'est le même affichage rétinien PPI que l'iPhone 4/4S, c'est simplement une taille d'écran différente. Les images @ 2x seront utilisées sur l'iPhone 5 ainsi que sur les 4/4S.
Pour compléter le répondeur de Jason, je proposerais: Que diriez-vous de remplacer la méthode imageNamed:
de UIImage
pour qu'elle ait le suffixe "-568" du nom de votre image? Ou ajoutez une nouvelle méthode appelée resolutionAdaptedImageNamed:
à la UIImage
en utilisant éventuellement une catégorie.
Si j'ai un peu de temps dans les prochains jours, je vais essayer de poster le code pour cela.
Attention: ne fonctionnera pas pour les images des fichiers Nib.
Si vous utilisez Xcode 5, vous pouvez utiliser le catalogue d’actifs (voir l’utilisation correspondante documentation Apple ).
Une fois votre catalogue de ressources créé, [ UIImage imagedNamed: @"your_image_set" ]
extraira la bonne image en fonction du périphérique.
Vous pouvez également créer une catégorie pour cette catégorie, comme indiqué ci-dessous.
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:@"-568h@2x" atIndex:dot.location];
} else {
[imageNameMutable appendString:@"-568h@2x"];
}
}
}
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageNameMutable ofType:@"png"];
if (imagePath) {
return [UIImage retina4ImageNamed:imageNameMutable];
} else {
return [UIImage retina4ImageNamed:imageName];
}
return nil;
}
@end
Et vous pouvez directement vérifier en utilisant importer cette catégorie comme ci-dessous où vous ne voudrez pas vérifier 568 ou image normale
imgvBackground.image=[UIImage imageNamed:@"bkground_bg"];//image name without extantion