2011-04-06 21 views

Odpowiedz

5

Możesz sprawdzić właściwość scale na [UIScreen mainScreen], jeśli masz 2.0 na siatkówce, jeśli nie jesteś 1.0. Możesz również uzyskać skalę z bieżącego kontekstu CoreGraphics.

+2

Aplikacja ulegnie awarii, jeśli użytkownik uruchomi ją na iOS <4 –

+2

Prawidłowo. Właśnie dlatego chcesz sprawdzić najpierw, czy [[UIScreen mainScreen] respondsToSelector: @selector (scale)] jest prawdziwe. Jest to ogólna koncepcja sposobu kodowania w celu zapewnienia kompatybilności wstecznej. – GorillaPatch

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

To prawdopodobnie powinno być> = 2.0 teraz (iPhone 6/6 +) – shabbirv

-1

Nie sądzę, że można określić bezpośrednio. Będziesz musiał wywnioskować to z informacji o modelu, które możesz uzyskać z sysctlbyname (zobacz strony man iOS). Na przykład:

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

daje z powrotem ciąg jak „iPhone3,1”, który ma wyświetlacz siatkówki, czyli „iPhone 2,1”, który nie ma.

+0

To jest okropny pomysł - nie jest w żaden sposób odporny na przyszłość i nie uwzględnia nawet czwartego genusa iPoda touch, który również ma siatkówkę pokaz. Właściwość 'scale 'klasy' UIScreen', opisana w innych odpowiedziach, jest poprawną metodą. –

+2

Dobra uwaga. Poprawiono mnie. – onnoweb

Powiązane problemy