2012-03-13 16 views

risposta

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

Anche se tecnicamente corretto, molto probabilmente tornerà vero per tutti i futuri iPad (che potrebbero comunque essere proprio ciò di cui hai bisogno). –

+0

Questo risponde alla domanda, (rileva il display Retina). Ma se hai davvero bisogno di conoscere la versione del dispositivo, vedi [qui] (http://stackoverflow.com/questions/9638970/ios-the-new-ipad-uidevicehardware-hw-machine-codename) per una risposta che identifica tutti i dispositivi . – bobobobo

+0

funziona sia per iOS 7 che per iOS 8. Grazie! – imcc

5

Come altri utenti hanno risposto, è necessario verificare le caratteristiche piuttosto che i modelli. Tuttavia, nei pochi casi oscuri in cui è possibile identificare un particolare modello, è possibile utilizzare il comando sysctrl hw.machine nel modo seguente. Nota che se non puoi identificare il modello, è molto probabile perché il tuo codice è in esecuzione su un nuovo modello, quindi dovresti fare qualcosa di sensato in quel caso.

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

Ora è possibile confrontare "macchina" con valori noti. Ad esempio, per rilevare i modelli iPad (marzo 2012):

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

Ho già testato la mia app sull'emulatore iPad (Retina) e ha funzionato. Ho pensato che avrei avuto un problema a causa della nuova risoluzione del nuovo iPad, ma mi sbagliavo completamente. Grazie comunque, questo può essere utile per gli altri. – Freedom

Problemi correlati