2014-11-11 17 views
17

Ich möchte für jedes Gerät unterschiedliche Hintergrundbilder angeben. Gefallen Sie dieseXcode 6 wie man separate @ 2x Bilder für iPhone 5 und 6 Geräte einstellt?

iPhone 6 Plus 1242x2208 pixels [email protected] 
iPhone 6  750x1334 pixels [email protected] 
iPhone 5  640x1136 pixels [email protected] 
iPhone 4  640x960 pixels [email protected] 
iPhone 3GS  320x480 pixels bg.png 

In LaunchImage gibt es Option zur Verfügung, um Bilder für Retina HD 4.7 Gerät angeben. Also kein Problem für Launch Images.

enter image description here

In .xcassets Datei, ich habe Option für 1x, 2x, Retina 4 2x und 3x. Aber es gibt keine Option für iPhone 6 (1334x750) Gerät.

enter image description here

Wie 1334x750 px Bild für iPhone 6-Gerät zur Verfügung zu stellen? Suchen Sie nach einer Lösung mit .xcassets Datei, nicht durch programmgesteuertes Laden von Bildern für jedes Gerät.

Ich habe bereits die zugehörigen SO's Fragen besucht, aber keine von ihnen antwortet speziell für iPhone 6 Gerätebilder.

iPhone 6 Plus resolution confusion: Xcode or Apple's website? for development

xcode 6 asset catalog iphone 6

+0

Retina 4.7 gleich mit Retina 4 @ 2x. iPhone 6 ist 326 ppi, plus ist 401 ppi. –

+0

@ValarMorghulis, sie haben sogar unterschiedliche Punktgrößen, nur das Seitenverhältnis ist gleich. nicht? – Khawar

+0

Ja, du hast Recht. iPhone 6 ist 667 x 375 Punkte und iPhone 5 ist 568 x 320 Punkte. Aber funktioniert mit gleichem Maßstab @ 2x, ich weiß nicht warum :) –

Antwort

1

stellen Sie Ihre Bildnamen wie folgt;

Bild-320 @ 2x // iPhone 5

Bild-375 @ 2x // iPhone 6

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width); 
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth]; 
UIImage *image = [UIImage imageNamed:imageName]; 
+1

danke für die Antwort. Aber wie ich bereits in Frage gestellt habe, suchte ich nach einer Lösung, die keine Programmierung erfordert. – Khawar

+5

Und wenn es keine solche Antwort gibt (und ich glaube nicht, dass es gibt), hier ist Ihre Antwort. –

+0

Danke Kumpel! Keine ifs mehr, ich würde auch Höhen verwenden, um zwischen 4s und 5 zu unterscheiden. – Markus

1

Images.xcassets hat Option separates Bild zu schaffen für iPhone 5 (Retina 4 @ 2x), iPhone 6 (@ 2x) und iPhone 6 plus (3x).

enter image description here

Es gibt keine Option für iPhone 4 Vermögenswert ist (wahrscheinlich Apfel stoppt iPhone 4 Unterstützung) eher nimmt es @ 2x Bilder (Skala-Modus) für das iPhone 4 auch, aber Sie können so etwas wie This post für iPhone 4 tun

aktualisiert Xcode 7

Es gibt keine Option für separates Bild mit Images.xcassets jetzt in Xcode 7, haben wir für Retina HD-Gerät gleiche 2x Bilder für alle Retina-Geräte und 3x verwenden

+0

Sie haben die Frage nicht beantwortet. OP hat es geschafft und er hat Ihren Link schon zur Verfügung gestellt. –

+0

Ich denke, das 2x Symbol ist gemein, um in iPhone 4/4S anstelle von iPhone 6 verwendet zu werden? –

+0

2x Bilder sind für alle Retina-Geräte, obwohl sie in Xcode 6 die Option für das iPhone 5 separat gegeben, aber in Xcode 7 entfernt haben – Abhishek

0

Wenn Sie auf verschiedenen Geräten explizit verschiedene Inhalte erstellen möchten, müssen Sie dies zunächst im Code tun, z. B. Valar Morghulis said.

NSNumber *screenWidth = @([UIScreen mainScreen].bounds.size.width); 
NSString *imageName = [NSString stringWithFormat:@"image-%@", screenWidth]; 
UIImage *image = [UIImage imageNamed:imageName]; 

OR, können Sie UIDevice Klasse verwenden, um diese Informationen zu erhalten.Es hat mehrere Methoden mit boolean Renditen können Sie verschiedene Informationen über das Gerät erhalten verwenden:

[[UIDevice currentDevice] platform] 
[[UIDevice currentDevice] hasRetinaDisplay] 
[[UIDevice currentDevice] hasMultitasking] 

OR, können Sie umfassen <sys/sysctl.h> und;

NSString *platform = [self platform]; 

if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; 
if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; 
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; 
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)"; 
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; 

so weiter und so fort. Sie können über Gerätezeichenfolgen unter here erfahren.

Es gibt einige andere Möglichkeiten, dies programmgesteuert zu tun, aber ab sofort gibt es keine explizite Möglichkeit, dies in dem Interface Builder, den ich kenne, zu tun. Zögern Sie nicht, auf meine Fehler hinzuweisen.

Verwandte Themen