我的应用使用UIBlurEffect,但是较旧的设备(特别是支持iOS 8的iPad 2和3)不支持模糊处理。
UIBlurEffect
我想检查用户设备是否支持模糊。我该怎么做?
UIDevice有一种[UIDevice _graphicsQuality]看似有希望的内部方法,但是您的应用程序当然会被Apple拒绝。让我们创建自己的方法:
UIDevice
[UIDevice _graphicsQuality]
首先,我们需要知道我们正在使用的确切设备类型:
#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
iPad2,1
因此,让我们将设备模型分为两类:图形质量较差(因此不支持模糊)的设备模型和图形质量较高的设备模型。根据我的调查,以下是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