2012-03-13 11 views

Respuesta

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

Aunque técnicamente correcto, lo más probable es que sea cierto también para todos los iPads futuros (que aún puede ser justo lo que necesita). –

+0

Responde la pregunta, (detecta la pantalla Retina). Pero si realmente necesita conocer la versión del dispositivo, consulte [aquí] (http://stackoverflow.com/questions/9638970/ios-the-new-ipad-uidevicehardware-hw-machine-codenaname) para obtener una respuesta que identifique _all_ dispositivos . – bobobobo

+0

esto funciona tanto para iOS 7 como para iOS 8. ¡Gracias! – imcc

5

Como han respondido otros carteles, debe comprobar las características en lugar de modelos. Sin embargo, en los pocos casos poco claros en los que es posible que desee identificar un modelo en particular, puede utilizar el hw.machine sysctrl de la siguiente manera. Tenga en cuenta que si no puede identificar el modelo, lo más probable es que su código se ejecute en un nuevo modelo, por lo que debe hacer algo sensato en ese 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); 

Ahora puede comparar "máquina" con valores conocidos. Por ejemplo, para detectar modelos de iPad (marzo de 2012):

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

Ya probé mi aplicación en el emulador de iPad (Retina) y funcionó. Pensé que tendría un problema debido a la nueva resolución del nuevo iPad, pero estaba totalmente equivocado. Gracias de todos modos, esto puede ser útil para otros. – Freedom

Cuestiones relacionadas