UIDevice
имеет внутренний метод [UIDevice _graphicsQuality]
, который кажется многообещающим, но, конечно же, ваше приложение будет отклонено Apple. Давайте создадим наш собственный метод:
Прежде всего, нам нужно знать тип точного устройства мы работаем на:
#import <sys/utsname.h>
NSString* deviceName()
{
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}
Это должно вернуть iPad2,1
для IPad 2, например. Вот обновленный список моделей iDevice: https://theiphonewiki.com/wiki/Models
Итак, давайте классифицируем наши модели устройств в двух группах: те, которые имеют низкое качество графики (и, следовательно, не поддерживают размытие), и те, у которых отличное качество графики. Согласно моему исследованию, это устройства, которые Apple рассматривает со «плохой» графикой (они могут измениться в будущем):
iPad iPad1,1 iPhone1,1 iPhone1,2 iPhone2,1 iPhone3,1 iPhone3, 2 iPhone3,3 iPod1,1 iPod2,1 iPod2,2 iPod3,1 iPod4,1 iPad2,1 iPad2,2 iPad2,3 iPad2,4 iPad3,1 iPad3,2 iPad3,3
Таким образом, мы напишите следующий код:
NSSet *graphicsQuality = [NSSet setWithObjects:@"iPad",
@"iPad1,1",
@"iPhone1,1",
@"iPhone1,2",
@"iPhone2,1",
@"iPhone3,1",
@"iPhone3,2",
@"iPhone3,3",
@"iPod1,1",
@"iPod2,1",
@"iPod2,2",
@"iPod3,1",
@"iPod4,1",
@"iPad2,1",
@"iPad2,2",
@"iPad2,3",
@"iPad2,4",
@"iPad3,1",
@"iPad3,2",
@"iPad3,3",
nil];
if ([graphicsQuality containsObject:deviceName()]) {
// Device with poor graphics, blur not supported
} else {
// Blur supported
}
Будьте осторожны, потому что хотя устройство может поддерживать размытие, пользователь может отключить расширенные визуальные эффекты из «Настройки», «Доступность».
Альтернативный метод
https://gist.github.com/conradev/8655650
При использовании Simulator свойство 'systemInfo.machine' - x86_64 (на моем Mac); – Tjalsma