2014-11-11 19 views
17

Desidero specificare diverse immagini di sfondo per ogni dispositivo iPhone. Ti piace questaXcode 6 come impostare immagini separate @ 2x per dispositivi iPhone 5 e 6?

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 c'è opzione disponibile per specificare le immagini per Retina HD 4.7 dispositivo. Quindi nessun problema per lanciare immagini.

enter image description here

In .xcassets di file, ho l'opzione per 1x, 2x, Retina 4 2x e 3x. Ma non esiste un'opzione per il dispositivo iPhone 6 (1334x750).

enter image description here

Così come per fornire un'immagine 1334x750 px per iPhone dispositivo 6? Alla ricerca di una soluzione utilizzando il file .xcassets, non caricando a livello di codice le immagini per ciascun dispositivo.

Ho già visitato le domande relative a SO, ma nessuna di esse risponde in modo specifico per le immagini del dispositivo iPhone 6.

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

xcode 6 asset catalog iphone 6

+0

Retina 4.7 uguale a Retina 4 @ 2x. iPhone 6 è 326 ppi, più è 401 ppi. –

+0

@ValarMorghulis, hanno anche diverse dimensioni dei punti, solo le proporzioni sono uguali. non? – Khawar

+0

Sì, hai ragione. iPhone 6 è 667x375 punti e iPhone 5 è 568x320 punti. Ma funziona con la stessa scala @ 2x, non so perché :) –

risposta

1

impostare il tuo nome dell'immagine come questo;

immagine-320 @ 2x // iPhone 5

immagine-375 @ 2x // iPhone 6

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

grazie per la risposta. Ma come ho già descritto in questione, stavo cercando una soluzione che non richiedesse programmazione. – Khawar

+5

E se non c'è una tale risposta (e non credo che ci sia), ecco la tua risposta. –

+0

Grazie amico! Non più se, vorrei anche usare altezze per differenziare tra 4 e 5. – Markus

1

Images.xcassets ha l'opzione di fornire un'immagine separata per iPhone 5 (Retina 4 @ 2x), iPhone 6 (@ 2x) e iPhone 6 plus (3x).

enter image description here

Non esiste alcuna opzione per iPhone 4 di asset (probabilmente mela è l'arresto di iPhone 4 di supporto), piuttosto che serve @ immagini 2x (modalità scala) per iPhone 4 anche, ma si può fare qualcosa di simile This post per iPhone 4

Aggiornamento Xcode 7

non esiste alcuna opzione per un'immagine separata con Images.xcassets ora in Xcode 7, dobbiamo usare stesse immagini 2x per tutti i dispositivi retina e 3x per dispositivi Retina HD

+0

Non hai risposto alla domanda. L'OP l'ha fatto e ha già fornito il tuo link. –

+0

Penso che l'icona 2x sia da utilizzare in iPhone 4/4S anziché iPhone 6? –

+0

2x immagini sono per tutti i dispositivi retina, anche se hanno dato l'opzione per iPhone 5 separatamente in Xcode 6 ma rimosso in Xcode 7 – Abhishek

0

Se si desidera eseguire in modo esplicito elementi diversi su dispositivi diversi, è necessario farlo in codice per ora, ad esempio Valar Morghulis said.

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

OPPURE, è possibile utilizzare la classe UIDevice per ottenere tali informazioni.Ha diversi metodi con rendimenti booleane è possibile utilizzare per ottenere varie informazioni sul dispositivo:

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

O, è possibile includere <sys/sysctl.h> e;

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)"; 

così via e così via. Puoi conoscere le stringhe del dispositivo allo here.

Ci sono altri modi per farlo a livello di codice, ma al momento non esiste un modo esplicito per farlo nel generatore di interfacce che io conosca. Sentiti libero di indicare i miei errori.

Problemi correlati