web-dev-qa-db-fra.com

Nouveau nom d'image pour iPhone 5

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?

34
mmoore410

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.

24
Jason Coco

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")];
55
avishic

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.

1
Wasim

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.

1
MonsieurDart

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.

1
hsarret

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
0
sinh99