2012-10-04 11 views
12

Sagen wir, ich habe drei Bilder in einem Bündel oder Asset-Katalog:UIImage imagenamed: nicht automatisch Retina @ 2x Bilder wählen

  1. Standard ~ iphone.png
  2. [email protected]~iphone.png
  3. [email protected]

auf iOS 4 und höher können die UIImage Konstruktor den Bildnamen wie folgt ablaufen:

[UIImage imageNamed:@"Default"]; 

Wenn ich auf einem 3,5-Zoll-Retina-Display (iPhone) bin, wählt es automatisch Bild (2). Wenn es sich auf einem Nicht-Retina-Display befindet, wählt es (1). Das ist toll.

Ich nannte Bild 3 wie für das 4 Zoll Retina (iPhone 5) Startbild angegeben. Gibt es eine Möglichkeit, Bild (3) zu benennen, so dass, wenn ich auf einem 4-Zoll-Retina-Display laufe, es mit dem gleichen UIImage-Konstruktor zurückgegeben wird?

Vielleicht ist dies noch nicht implementiert, oder ich erwarte zu viel von der Bequemlichkeit ... Ich versuche nur, bedingte Logik in meinem Code zu vermeiden, um das Bild basierend auf den Bildschirmdimensionen auszuwählen.

Antwort

12

Ich hatte auch das gleiche Problem und es stellte sich heraus, dass es kein solches Verhalten für das iPhone 5/iPod Touch der 5. Generation gibt.

Sie müssen manuell feststellen, ob Ihre App auf einem solchen Gerät läuft, und den Dateinamen entsprechend ändern.

Ich habe diese Methode verwendet, um zu überprüfen, ob meine App auf einem iPhone 5/iPod Touch 5G .:

#define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && [UIScreen mainScreen].scale == 2.f && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

Dann können Sie den Bildnamen wie folgt anpassen läuft:

if(IS_PHONEPOD5()) { 
    myImageView.image = [UIImage imageNamed:@"MyImage-568h.png"]; 
} else { 
    myImageView.image = [UIImage imageNamed:@"MyImage.png"]; 
} 

Update
Ich fand auch eine UIImage-Kategorie auf Github (Link), die implementiert, was Sie suchen. Es gibt keinen Fallback für nicht existierende Dateien, aber Sie können es einfach selbst implementieren.

+0

+1 Dies ist eine große Kategorie ist. Danke für den Link. Technisch hat es jedoch bereits einen Ausweichmechanismus für nicht existierende Bilder - es gibt nur die Methode 'UIImage imageNamed:' zurück, mit der ursprünglichen Zeichenkette, die übergeben wurde. Dies ist für mich als das gewünschte Verhalten in solchen Fällen sinnvoll. –

+0

Das habe ich mir gedacht. Ich landete eine ähnliche UIImage-Kategorie. – JoelF

2

Es gibt keine 4" Bildtyp. Das einzige, was von allem anderen ist die Einbeziehung von [email protected] unterscheidet, die für ein iPhone 5 als Startbild verwendet wird, und signalisiert das Betriebssystem, die Ihre Anwendung unterstützt den längeren Bildschirm und shouldn Letterboxed

Sie müssen in Code oder mit Autolayouts mit den verschiedenen Bildschirmgrößen handeln.Es gibt keinen speziellen, automatischen Bildtyp.Es ist entweder ein Standard-Bildschirmbildtyp oder ein Retina-Bildtyp, der gleiche wie es war seit iOS 4.

0

Neue API in iOS 8 ermöglicht Ihnen Retina Versionen eines benannten Bild zu laden, zuvor hatte man sich die Dateinamen zu bestimmen:

UIImage* retinaImage = [UIImage imageNamed:@"ImageName" 
    inBundle:nil compatibleWithTraitCollection:nil]; 

NSLog(@"screen scale: %2.2f retinaImage: %@", 
    [UIScreen mainScreen].nativeScale, retinaImage); 
Verwandte Themen