web-dev-qa-db-ja.com

ユーザーがiPhone 6 Plusを標準モードまたはズームモードのどちらで持っているかをどのように検出できますか?

ユーザーがiPhone 6 Plusを標準モードまたはズームモードのどちらで持っているかをどのように検出できますか?これは可能ですか?

私はもう試した [UIScreen mainScreen].scaleと報告されます3.0 両方の場合において。

24
barfoon

新しいメンバーがいます

[[UIScreen mainScreen] nativeScale]

あなたがしたいことをするはずです。 iOS 8でのみ利用できるため、保護する必要があります

12
Paul Franceus

次のコードは、boundscoordinateSpacenativeScaleおよびscaleを取得するために使用できます。つまり、iPhone 6 Plusでは、nativeScaleは2.608、デバイスがズームモードで実行されている場合は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に依存しないでください。シミュレータと実際のデバイスでは結果が異なるためです。

11

[UIScreen mainScreen].currentModeレポート:

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

PaulaChavarríaの answer for iOS 8のマクロを更新(ここで[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)
8
xZenon

これらのオプションは、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) 
5
Vaibhav Sharma