一尘不染

检查设备是否支持模糊

swift

我的应用使用UIBlurEffect,但是较旧的设备(特别是支持iOS 8的iPad 2和3)不支持模糊处理。

我想检查用户设备是否支持模糊。我该怎么做?


阅读 190

收藏
2020-07-07

共1个答案

一尘不染

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

2020-07-07