简体   繁体   English

在iPhone App中如何检测设备的屏幕分辨率

[英]in iPhone App How to detect the screen resolution of the device

In iPhone App, while running the App on device How to detect the screen resolution of the device on which App is running?在iPhone App中,在设备上运行App时如何检测运行App的设备的屏幕分辨率?

CGRect screenBounds = [[UIScreen mainScreen] bounds];

That will give you the entire screen's resolution in points, so it would most typically be 320x480 for iPhones. 这将为您提供整个屏幕的分辨率,因此iPhone最通常为320x480。 Even though the iPhone4 has a much larger screen size iOS still gives back 320x480 instead of 640x960. 尽管iPhone4的屏幕尺寸要大得多,但iOS仍然可以提供320x480而不是640x960。 This is mostly because of older applications breaking. 这主要是因为较旧的应用程序崩溃。

CGFloat screenScale = [[UIScreen mainScreen] scale];

This will give you the scale of the screen. 这将为您提供屏幕的比例。 For all devices that do not have Retina Displays this will return a 1.0f, while Retina Display devices will give a 2.0f and the iPhone 6 Plus (Retina HD) will give a 3.0f. 对于没有Retina显示器的所有设备,这将返回1.0f,而Retina显示设备将提供2.0f,而iPhone 6 Plus(Retina HD)将提供3.0f。

Now if you want to get the pixel width & height of the iOS device screen you just need to do one simple thing. 现在,如果你想获得iOS设备屏幕的像素宽度和高度,你只需要做一件简单的事情。

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);

By multiplying by the screen's scale you get the actual pixel resolution. 通过乘以屏幕的比例,您可以获得实际的像素分辨率。

A good read on the difference between points and pixels in iOS can be read here . 可以在此处阅读有关iOS中点和像素之间差异的详细信息

EDIT: (Version for Swift) 编辑:( Swift版本)

let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)

UIScreen class lets you find screen resolution in Points and Pixels. UIScreen类允许您以点和像素查找屏幕分辨率。

Screen resolutions is measured in Points or Pixels. 屏幕分辨率以点或像素为单位。 It should never be confused with screen size. 它绝不应与屏幕尺寸混淆。 A smaller screen size can have higher resolution. 较小的屏幕尺寸可以具有更高的分辨率。

UIScreen's 'bounds.width' return rectangular size in Points UIScreen的'bounds.width'在Points中返回矩形大小 在此输入图像描述

UIScreen's 'nativeBounds.width' return rectangular size in Pixels.This value is detected as PPI ( Point per inch ). UIScreen的'nativeBounds.width'以像素为单位返回矩形大小。此值被检测为PPI(每英寸点数)。 Shows the sharpness & clarity of the Image on a device. 显示设备上图像的清晰度和清晰度。 在此输入图像描述

You can use UIScreen class to detect all these values. 您可以使用UIScreen类来检测所有这些值。

Swift3 Swift3

// Normal Screen Bounds - Detect Screen size in Points.
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
print("\n width:\(width) \n height:\(height)")

// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.main.nativeBounds.width
let nHeight = UIScreen.main.nativeBounds.height
print("\n Native Width:\(nWidth) \n Native Height:\(nHeight)")

Console 安慰

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0

Swift 2.x Swift 2.x

//Normal Bounds - Detect Screen size in Points.
    let width  = UIScreen.mainScreen.bounds.width
    let height = UIScreen.mainScreen.bounds.height

// Native Bounds - Detect Screen size in Pixels.
    let nWidth  = UIScreen.mainScreen.nativeBounds.width
    let nHeight = UIScreen.mainScreen.nativeBounds.height

ObjectiveC 的ObjectiveC

// Normal Bounds - Detect Screen size in Points.
CGFloat *width  = [UIScreen mainScreen].bounds.size.width;
CGFloat *height = [UIScreen mainScreen].bounds.size.height;

// Native Bounds - Detect Screen size in Pixels.
CGFloat *width  = [UIScreen mainScreen].nativeBounds.size.width
CGFloat *height = [UIScreen mainScreen].nativeBounds.size.width

Use it in App Delegate: I am using storyboard 在App Delegate中使用它:我正在使用故事板

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    //----------------HERE WE SETUP FOR IPHONE 4/4s/iPod----------------------

    if(iOSDeviceScreenSize.height == 480){          

        UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

        iphone=@"4";

        NSLog(@"iPhone 4: %f", iOSDeviceScreenSize.height);

    }

    //----------------HERE WE SETUP FOR IPHONE 5----------------------

    if(iOSDeviceScreenSize.height == 568){

        // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
        UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

         NSLog(@"iPhone 5: %f", iOSDeviceScreenSize.height);
        iphone=@"5";
    }

} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // NSLog(@"wqweqe");
    storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];

}

 return YES;
 }

For iOS 8 we can just use this [UIScreen mainScreen].nativeBounds , like that: 对于iOS 8,我们可以使用这个[UIScreen mainScreen].nativeBounds ,就像这样:

- (NSInteger)resolutionX
{
    return CGRectGetWidth([UIScreen mainScreen].nativeBounds);
}

- (NSInteger)resolutionY
{
    return CGRectGetHeight([UIScreen mainScreen].nativeBounds);
}

See the UIScreen Reference: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html 请参阅UIScreen参考: http//developer.apple.com/library/ios/#documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html

if([[UIScreen mainScreen] respondsToSelector:NSSelectorFromString(@"scale")])
{
    if ([[UIScreen mainScreen] scale] < 1.1)
        NSLog(@"Standard Resolution Device");

    if ([[UIScreen mainScreen] scale] > 1.9)
        NSLog(@"High Resolution Device");
}

Use this code it will help for getting any type of device's screen resolution 使用此代码可以帮助您获取任何类型的设备屏幕分辨率

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

If your goal is to get the model resolution type and not the resolution values themeselfs, this Swift solution might be helpful:如果您的目标是获取 model 分辨率类型而不是分辨率值主题,则此Swift解决方案可能会有所帮助:

import UIKit

@objc(IphoneModelScreenSize)
public class IphoneModelScreenSize: NSObject {

    // MARK: Enums

    public enum IphoneModelScreenSize: Int {
    case notAnIphone = 0,
         twoThreeOrFour = 1,
         se = 2,
         sixSevenOrEight = 3,
         plus = 4,
         elevenXorXS = 5,
         elevenProMaxOrXsMax = 6
    }

    // MARK: Class properties

    public class func screenSize() -> IphoneModelScreenSize {
        let bounds = UIScreen.main.bounds
        let screenWidth = bounds.size.width
        let screenHeight = bounds.size.height

        switch (screenWidth, screenHeight) {
        case (320.0, 480.0):
          return .twoThreeOrFour
        case (320.0, 568.0):
          return .se
        case (375.0, 667.0):
          return .sixSevenOrEight
        case (414.0, 736.0):
          return .plus
        case (375.0, 812.0):
          return .elevenXorXS
        case (414.0, 896.0):
          return .elevenProMaxOrXsMax
        default:
          return .notAnIphone
        }
    }

    public class func screenSizeStringValue() -> String {
        return screenSizeEnumToString(screenSize())
    }

    // MARK: Private properties

    private class func screenSizeEnumToString(_ screenSize: IphoneModelScreenSize) -> String {
        var screenSizeAsString: String

        switch screenSize {
        case .notAnIphone:
            screenSizeAsString = "Not an Iphone"
        case .twoThreeOrFour:
            screenSizeAsString = "2G, 3G, 3GS, 4 or 4s"
        case .se:
            screenSizeAsString = "5, 5s, 5c or SE"
        case .sixSevenOrEight:
            screenSizeAsString = "6, 6s, 7 or 8"
        case .plus:
            screenSizeAsString = "6+, 6s+, 7+ or 8+"
        case .elevenXorXS:
            screenSizeAsString = "11 Pro, X or Xs"
        case .elevenProMaxOrXsMax:
            screenSizeAsString = "11, Xr, 11 Pro Max or Xs Max"
        }

        return screenSizeAsString
    }

}

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

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