【问题标题】:Getting the screen resolution in iphone获取iphone的屏幕分辨率
【发布时间】:2012-12-22 15:17:38
【问题描述】:

您好,我需要获取屏幕宽度和高度。 我用过这种方式

UIWindow* window = [UIApplication sharedApplication].keyWindow;
NSLog(@"%f",window.frame.size.width);
NSLog(@"%f",window.frame.size.height);

问题是我有一部 iPhone 4,但分辨率显示为 480x320,这是不正确的...

【问题讨论】:

  • 你应该澄清你想要的屏幕尺寸是像素而不是点(假设这是你真正想要的)。

标签: iphone objective-c ios screen-resolution


【解决方案1】:
float scaleFactor = [[UIScreen mainScreen] scale];
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat widthInPixel = screen.size.width * scaleFactor;
CGFloat heightInPixel = screen.size.height * scaleFactor;

关于 480x320 的屏幕分辨率,这绝对是正确的,因为这为您提供了逻辑大小,或者您可以将大小以点表示为 480 点 x 320 点。

点和像素是有区别的。 Pixel 是最小的显示单位。

Point 是像素的集合。

如果是 iPhone 4 1 点 = 2 像素
iPhone 3GS 1 点 = 1 像素

请参考docs for scale and bounds

bounds包含屏幕的边界矩形,以磅为单位。
scale该值反映了从默认逻辑坐标空间转换到该屏幕的设备坐标空间所需的比例因子。默认逻辑坐标空间使用点进行测量,其中一个点大约等于 1/160 英寸。如果设备的屏幕具有相当相似的像素密度,则比例因子通常设置为 1.0,以便一个点映射到一个像素。但是,像素密度明显不同的屏幕可能会将此属性设置为更高的值。

【讨论】:

    【解决方案2】:

    你必须乘以屏幕的比例:

    CGSize sz = [UIScreen mainScreen].bounds.size;
    float sc = [UIScreen mainScreen].scale;
    size_t w = sz.width * sc;
    size_t h = sz.height * sc;
    

    【讨论】:

      【解决方案3】:

      您需要获取屏幕的比​​例并将其乘以宽度和高度。例如:

      UIWindow* window = [UIApplication sharedApplication].keyWindow;
      UIScreen *screen = window.screen;
      CGFloat scale = screen.scale;
      
      NSLog(@"%f",window.frame.size.width);
      NSLog(@"%f",window.frame.size.height);
      NSLog(@"screen pixels width: %f height: %f", window.frame.size.width * scale, window.frame.size.height * scale);
      

      【讨论】:

        【解决方案4】:

        如果您需要屏幕高度和宽度,请使用:

        CGRect screenRect = [[UIScreen mainScreen] bounds];
        CGFloat screenWidth = screenRect.size.width;
        CGFloat screenHeight = screenRect.size.height;
        

        【讨论】:

        • 这与 OP 遇到的问题相同。 CoreGraphics 以点为单位,而不是像素。请阅读文档。
        【解决方案5】:
        CGRect screen = [[UIScreen mainScreen] bounds];
        CGFloat width = CGRectGetWidth(screen);
        CGFloat height = CGRectGetHeight(screen);
        

        【讨论】:

          【解决方案6】:

          你需要的是这个:[UIScreen mainScreen].nativeBounds,来自 iOS 8 的 API

          【讨论】:

            【解决方案7】:

            通过此代码,您可以获取任何 iphone 的屏幕高度和宽度,并根据需要在您的应用程序中使用它。

             [[UIScreen mainScreen] bounds].size.height
             [[UIScreen mainScreen] bounds].size.width
            

            【讨论】:

              猜你喜欢
              • 2016-06-28
              • 1970-01-01
              • 1970-01-01
              • 2013-07-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多