是否可以使用此代码来检测iPhone屏幕尺寸?

时间:2015-03-19 08:44:53

标签: ios objective-c

我知道根据屏幕尺寸改变应用程序并不是一个好主意,但我正在尝试修改相机并使用自定义叠加图像,因此我需要知道屏幕尺寸。有很多解决方案可以使用宏检测屏幕大小等我正在使用它:

-(void)detectPhone{

    CGFloat width;
    width= [[UIScreen mainScreen] bounds].size.width;

    if(width==320) {

        CGFloat height;
        height = [[UIScreen mainScreen] bounds].size.height;

        if(height==480) {

            NSLog(@"iPhone 4/4s");
        }

        else {

            NSLog(@"iPhone 5");
        }

    }

    else if (width==375) {


        NSLog(@"iPhone 6");

    }


    else {

        NSLog(@"iPhone 6+");

    }



}

使用此方法或任何不起作用的情况有什么问题吗?通过模拟器似乎很好。任何指针将不胜感激。感谢

4 个答案:

答案 0 :(得分:3)

这样很好,但是你要比较浮点数,所以我会避免使用==,而是使用>

答案 1 :(得分:1)

我用这个:

    #define IS_IPHONE [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone
    #define PJ_SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
    #define PJ_SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
    #define PJ_SCREEN_MAX_LENGTH (MAX(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT))
    #define PJ_SCREEN_MIN_LENGTH (MIN(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT))
    #define IS_HEIGHT_GTE_568 PJ_SCREEN_MAX_LENGTH >= 568.0f
    #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))
    #define IOS7_DELTA_HEIGHT (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) ? 20:0)
    #define IS_IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    #define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size

如果您想查看设备型号,请查看:Determine device (iPhone, iPod Touch) with iPhone SDK

答案 2 :(得分:0)

我认为您将遇到iOS8问题。来自iOS8     [UIScreen mainScreen] .bounds
面向接口(查看WWDC 2014的会话“View Controller Advancements in iOS 8”),这意味着在iOS8的横向模式中,高度和宽度都是相反的。

您可以使用以下代码创建帮助程序:

CGRect bounds = [UIScreen mainScreen].bounds;
if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
    bounds.size = CGSizeMake(bounds.size.height, bounds.size.width);
    //Your code to detect the device
    ...

}

答案 3 :(得分:0)

您应该只有一次屏幕,然后您可以在整个应用程序中使用它(无论何时需要)。为此,您可以在CGSize中的变量AppDelegate.h deviceSize和此方法第一行AppDelegate.m中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中设置变量,您可以获得此设备大小,< / p>

deviceSize = [[UIScreen mainScreen] bounds].size;

你可以定义一个这样的函数,

- (CGSize) sizeOfDevice {
    return deviceSize;
}

将其添加到AppDelegate.h中,就像这样,

- (CGSize) sizeOfDevice;

然后你可以将它与你的委托对象一起使用。