Определить, правильно ли отображается устройство UIVisualEffectView?

Мое приложение использует UIVisualEffectView, чтобы размыть фон точно так же, как Control Center. Но я обнаружил, что iPad 2 (и Retina iPad), который может запускать iOS 8, недостаточно мощный, чтобы отображать этот эффект, чтобы он возвращался к серому цвету. Я хотел бы узнать, работает ли приложение, работающее на нем, достаточно мощным, чтобы отображать эффект размытия, и если не я его не применяю, вместо этого я изменю цвет фона на что-то, что выглядит намного лучше, чем это серый цвет. Но я не хочу просто проверять, является ли устройство iPad 2 или iPad 3-го поколения (это также влияет на четвертый?). Есть ли лучший способ определить, появится ли UIBlurEffect как ожидалось?

Ответ 1

Проверьте этот сеанс WWDC: http://asciiwwdc.com/2014/sessions/419

Итак, и чтобы повторить, какие устройства мы не размываем, и что мы делаем только тонирование на iPad 2 и iPad 3-го поколения, мы просто применяем оттенок, и мы пропускаем шаги размытия.

[...]

На iPad 4-го поколения, iPad Air, iPad Mini, iPad Mini с дисплеем сетчатки, iPhone и iPod touch мы делаем размытие и тонирование.

Думаю, вам нужно прибегнуть к проверке имени машины:

#import <sys/utsname.h>
...

struct utsname systemInfo;
uname(&systemInfo);

NSString *deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
...

Ответ 2

Apple внутренне использует [UIDevice _graphicsQuality] для этих проверок. В следующем сообщении я предлагаю метод, который делает то же самое, используя только открытый API: fooobar.com/info/451331/...