Программно определить, есть ли у iPad дисплей Retina? - PullRequest
13 голосов
/ 13 марта 2012

Как программно (Objective-C) узнать, есть ли у iPad дисплей Retina?

Ответы [ 2 ]

19 голосов
/ 13 марта 2012
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale > 1)
{
    // new iPad
}
5 голосов
/ 23 марта 2012

Как ответили другие авторы, вам следует проверять функции, а не модели. Тем не менее, в нескольких непонятных случаях, когда вам может понадобиться идентифицировать конкретную модель, вы можете использовать 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...