繁体   English   中英

可以使用此代码检测iPhone屏幕尺寸吗?

[英]Is it okay to use this code to detect the iPhone screen size?

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

-(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+");

    }



}

使用此方法有什么问题,或者在任何情况下都不起作用? 通过模拟器运行它似乎很好。 任何指针将不胜感激。 谢谢

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

我用这个:

#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

如果要检查设备型号,请看一下: 使用iPhone SDK确定设备(iPhone,iPod Touch)

我认为您在使用iOS8时会遇到问题。 从iOS8 [UIScreen mainScreen] .bounds
是面向接口的(请参阅WWDC 2014的会话“ iOS 8中的View Controller Advances”),这意味着在横向模式下,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
    ...

}

您应该只将屏幕显示一次,然后才能在整个应用程序中使用它(任何需要时)。 为此,您可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的AppDelegate.hAppDelegate.m中具有可变的CGSize deviceSize,您可以获取该设备像这样的大小

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

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

- (CGSize) sizeOfDevice {
    return deviceSize;
}

像这样将其添加到AppDelegate.h

- (CGSize) sizeOfDevice;

然后可以将其与委托对象一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM