ios 如何检测用户的iPhone 6 Plus是处于标准模式还是缩放模式?

vsnjm48y  于 2023-01-22  发布在  iOS
关注(0)|答案(6)|浏览(159)

如何检测用户的iPhone 6 Plus是处于标准模式还是缩放模式?这可能吗?
我试过[UIScreen mainScreen].scale,两种情况下都报告3.0

li9yvcax

li9yvcax1#

有个新成员

[[UIScreen mainScreen] nativeScale]

它应该能满足你的需求。它只在iOS 8上可用,所以你需要保护它

kzmpq1sx

kzmpq1sx2#

[UIScreen mainScreen].currentMode报告:

<UIScreenMode: 0x17802f240; size = 1242.000000 x 2208.000000> // STANDARD
<UIScreenMode: 0x178226be0; size = 1125.000000 x 2001.000000> // ZOOMED
bq3bfh9z

bq3bfh9z3#

工作溶液:

//Display Zoom mode
var isZoomed: Bool {
    return UIScreen.main.scale < UIScreen.main.nativeScale
}

旧解决方案(在某些边缘情况下不可靠):

变量为缩放:布尔值{返回UI屏幕.主.比例!= UI屏幕.主.本机比例}
P.S:请不要混淆iPhone设置中的这些功能:

  1. Settings -> Display & Brightness -> Display Zoom
    与:
  2. Settings -> Accessibility -> Zoom .
    这里我们检查第一种类型。
mfuanj7w

mfuanj7w4#

以下代码可用于获取boundscoordinateSpacenativeScalescale,即,在iPhone 6 Plus上,nativeScale为2.608,当设备在缩放模式下运行时,nativeScale为2.88(注意,在模拟器中是不同的):

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

用于检测iPhone 6 Plus的代码:

-(BOOL)iPhone6PlusDevice{
    // Scale is 3 currently only for iPhone 6 Plus
    if ([UIScreen mainScreen].scale > 2.9) return YES;
    return NO;
}

-(BOOL)iPhone6PlusUnZoomed{
        if ([self iPhone6PlusDevice]){
            if ([UIScreen mainScreen].bounds.size.height > 720.0) return YES;  // Height is 736, but 667 when zoomed.
        }
        return NO;
    }

注意:如果您正在检查iPhone 6 Plus,调整用户界面,那么不要依赖.nativeScale,因为模拟器和实际设备给予了不同的结果。

3htmauhk

3htmauhk5#

更新了Paula Chavarría iOS 8 answer中的宏(其中[UIScreen mainScreen].bounds.size与方向相关):

#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && (MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0) && ((IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) || !IS_OS_8_OR_LATER))
#define IS_STANDARD_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0  && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale)
#define IS_ZOOMED_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale > [UIScreen mainScreen].scale)
#define IS_STANDARD_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 736.0)
#define IS_ZOOMED_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale < [UIScreen mainScreen].scale)
#define IS_IPHONE_6 (IS_STANDARD_IPHONE_6 || IS_ZOOMED_IPHONE_6)
#define IS_IPHONE_6_PLUS (IS_STANDARD_IPHONE_6_PLUS || IS_ZOOMED_IPHONE_6_PLUS)
1u4esq0p

1u4esq0p6#

这些选项用于检测iPhone设备。

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)

相关问题