如何在iOS8键盘扩展中检测iPad方向 [英] How to detect iPad orientation in iOS8 keyboard extension

查看:121
本文介绍了如何在iOS8键盘扩展中检测iPad方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我正在使用此方法来检测方向和设备:

Currently I'm using this method to detect the orientation and device:

适用于iPhone,但这是iPad的问题,无论方向是什么, [[UIScreen mainScreen] bounds] .size.width always == 768, [[UIScreen mainScreen] bounds] .size.height 总是== 1024.我的编码出了什么问题?

It works for iPhones, but these's an issue with iPad, that is whatever the orientation is, [[UIScreen mainScreen] bounds].size.widthalways ==768, and [[UIScreen mainScreen] bounds].size.height always == 1024. What's wrong with my coding?

 +(NSString*)GetOrientation{
    if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
        NSLog(@"Potrait");
        return @"Potrait";
    }
    else{
        NSLog(@"Landscape");
        return @"Landscape";
    }


}
+(NSString*)GetDeviceAccordingToScreenSize:(UIViewController*)ctrl{
    if ([[UIDevice currentDevice].model isEqualToString:@"iPad"]) {
        int screenWidth = [[UIScreen mainScreen] bounds].size.width;
        if (screenWidth==768) {
            return @"P-iPad";

        }else if(screenWidth==1024){
            return @"L-iPad";

        }else{
        return @"ERROR";
        }
    }else{
        if ([[self GetOrientation] isEqualToString:@"Potrait"]) {
            int screenHeight = [[UIScreen mainScreen] bounds].size.height;
            switch (screenHeight) {
                case 667:{
                    return @"P-iPhone6";
                    break;
                }

                case 736:{
                    return @"P-iPhone6Plus";
                    break;
                }
                case 568:{
                    return @"P-iPhone5";

                }
                default:{
                    return @"P-iPhone4";
                    break;
                }
            }
        }else{
            int screenWidth = [[UIScreen mainScreen] bounds].size.width;
            // float screenHeight = [[UIScreen mainScreen] bounds].size.height;
            switch (screenWidth) {
                case 667:{
                    return @"L-iPhone6";
                    break;
                }

                case 736:{
                    return @"L-iPhone6Plus";
                    break;
                }
                case 568:{

                    return @"L-iPhone5";
                    break;
                }
                default:{
                    return @"L-iPhone4";
                    break;
                }
            }

        }

    }

}

顺便说一句,在扩展程序中,您无权访问[UIApplication sharedApplication]

By the way, in extension you don't have access to [UIApplication sharedApplication]

推荐答案

您应该使用 nativeBounds 而不是边界来确保结果不依赖于应用程序在启动时的设备方向。

You should use nativeBounds instead of bounds to make sure the result doesn't depends on the device orientation of the application while it is being launched.

extension UIDevice{
    var detail:String {
        if iPhone {
            if UIScreen.mainScreen().nativeBounds.height == 480 {
                return "iPhone Classic"
            }
            if UIScreen.mainScreen().nativeBounds.height == 960 {
                return "iPhone 4 or 4S"
            }
            if UIScreen.mainScreen().nativeBounds.height == 1136 {
                return "iPhone 5 or 5S or 5C"
            }
            if UIScreen.mainScreen().nativeBounds.height == 1334 {
                return "iPhone 6"
            }
            if UIScreen.mainScreen().nativeBounds.height == 2208 {
                return "iPhone 6+"
            }
        } else if iPad {
            if UIScreen.mainScreen().nativeBounds.height == 1024 {
                return "iPad Classic"
            }
            if UIScreen.mainScreen().nativeBounds.height == 2048 {
                return "iPad Retina"
            }
        } else {
            return "Undefined"
        }

        return "test"
    }
    var iPhone:Bool {
        return UIDevice.currentDevice().userInterfaceIdiom == .Phone
    }
    var iPad:Bool {
        return UIDevice.currentDevice().userInterfaceIdiom == .Pad
    }
    var width:CGFloat{
        return UIScreen.mainScreen().bounds.width
    }  
    var landscape:Bool {
        if iPad && ( width == 1024.0 || width == 2048.0 ) {
            return true
        }
        if iPhone && ( width == 480.0 || width == 960 || width == 1136.0 || width == 1334.0 || width == 2208.0 ) {
            return true
        }
        return false
    }
}
if UIDevice().iPhone {
   println("This device is an iPhone")
}
if UIDevice().iPad {
    println("This device is an iPad")
}
println("Device detail: " + UIDevice().detail )
println("Landscape: " + UIDevice().landscape.description )

这篇关于如何在iOS8键盘扩展中检测iPad方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆