2012-03-13 3 views

ответ

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

Хотя технически корректно, он, скорее всего, вернется и для всех будущих iPads (которые все еще могут быть именно тем, что вам нужно). –

+0

Это отвечает на вопрос, (обнаруживайте дисплей Retina). Но если вам действительно нужно знать версию устройства, см. [Здесь] (http://stackoverflow.com/questions/9638970/ios-the-new-ipad-uidevicehardware-hw-machine-codename) для ответа, который идентифицирует _all_ устройства , – bobobobo

+0

это работает как для iOS 7, так и для iOS 8. Спасибо! – imcc

5

Как и другие плакаты, вы должны проверить функции, а не модели. Однако в нескольких неясных случаях, когда вы можете захотеть идентифицировать конкретную модель, вы можете использовать hw.machine sysctrl следующим образом. Обратите внимание: если вы не можете идентифицировать модель, это, скорее всего, потому, что ваш код работает на новой модели, поэтому вы должны сделать что-то разумное в этом случае.

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

Теперь вы можете сравнить «машину» с известными значениями. Например, для обнаружения моделей iPad (март 2012 г.):

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

Я уже тестировал свое приложение на эмуляторе iPad (Retina), и он работал. Я думал, что у меня будет проблема из-за нового разрешения нового iPad, но я был совершенно не прав. В любом случае, это может быть полезно для других. – Freedom