2011-04-06 15 views

risposta

5

È possibile controllare la proprietà scale su [UIScreen mainScreen] se è 2.0 in esecuzione su retina, se è 1.0 non lo si è. È inoltre possibile ottenere la scala dall'attuale contesto CoreGraphics.

+2

E l'applicazione si bloccherà se l'utente lo esegue su iOS <4 –

+2

corretto. Questo è il motivo per cui si desidera verificare prima se [[UIScreen mainScreen] rispondeToSelector: @selector (scala)] è vero. Questo è il concetto generale di come si codificherà per garantire la retrocompatibilità. – GorillaPatch

56
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] 
    && [[UIScreen mainScreen] scale] >= 2.0) { 
    // Retina 
} else { 
    // Not Retina 
} 
+2

Probabilmente dovrebbe essere> = 2.0 ora (iPhone 6/6 +) – shabbirv

-1

Non penso che sia possibile determinarlo direttamente. Dovrai dedurlo dalle informazioni del modello che puoi recuperare da sysctlbyname (vedi le pagine man di iOS). Per esempio:

sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
char *machine = malloc(size); 
sysctlbyname("hw.machine", machine, &size, NULL, 0); 

vi restituirà una stringa come "iPhone3,1", che dispone di un display retina, o "iPhone 2,1", che non ha.

+0

Questa è una pessima idea, non è affatto a prova di futuro e non tiene conto nemmeno dell'iPod touch della quarta generazione, che ha anche una Retina display. La proprietà 'scale' della classe' UIScreen', come descritto nelle altre risposte, è il modo corretto per farlo. –

+2

Buon punto. Sono corretto. – onnoweb

Problemi correlati