Подтвердить что ты не робот

Программно определить, есть ли у iPad дисплей Retina?

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

4b9b3361

Ответ 1

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

Ответ 2

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