2012-03-13 14 views

Odpowiedz

19
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale > 1) 
{ 
    // new iPad 
} 
+8

Chociaż technicznie poprawne, najprawdopodobniej zwróci true także dla wszystkich przyszłych iPadów (które wciąż mogą być właśnie tym, czego potrzebujesz). –

+0

To odpowiada na pytanie (wykryj ekran Retina). Ale jeśli naprawdę potrzebujesz znać wersję urządzenia, zobacz [tutaj] (http://stackoverflow.com/questions/9638970/ios-the-new-ipad-uidevicehardware-hw-machine-codename) dla odpowiedzi, która identyfikuje _all_ urządzenia . – bobobobo

+0

działa to zarówno w systemie iOS 7, jak i iOS 8. Dziękujemy! – imcc

5

Podobnie jak inne plakaty, należy sprawdzić funkcje, a nie modele. Jednak w kilku niejasnych przypadkach, w których możesz chcieć zidentyfikować konkretny model, możesz użyć sysctrl hw.machine w następujący sposób. Zwróć uwagę, że jeśli nie możesz zidentyfikować modelu, najprawdopodobniej twój kod działa na nowym modelu, więc w takim przypadku powinieneś zrobić coś sensownego.

#include <sys/types.h> 
#include <sys/sysctl.h> 

// Determine the machine name, e.g. "iPhone1,1". 
size_t size; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); // Get size of data to be returned. 
char *name = malloc(size); 
sysctlbyname("hw.machine", name, &size, NULL, 0); 

NSString *machine = [NSString stringWithCString:name encoding:NSASCIIStringEncoding]; 
free(name); 

Teraz możesz porównać "maszynę" ze znanymi wartościami. Na przykład w celu wykrycia modeli iPad (marzec 2012):

if ([machine hasPrefix:@"iPad3,"]) NSLog(@"iPad (March 2012) detected"); 
+0

Testowałem już moją aplikację na emulatorze iPad (Retina) i zadziałało. Myślałem, że będę miał problem z powodu nowej rozdzielczości nowego iPada, ale całkowicie się myliłem. Dzięki temu to może być przydatne dla innych. – Freedom

Powiązane problemy