trong Ứng dụng iPhone Cách phát hiện độ phân giải màn hình của thiết bị


130

Trong Ứng dụng iPhone, trong khi chạy Ứng dụng trên thiết bị Làm thế nào để phát hiện độ phân giải màn hình của thiết bị mà Ứng dụng đang chạy?

Câu trả lời:


349
CGRect screenBounds = [[UIScreen mainScreen] bounds];

Điều đó sẽ cung cấp cho bạn toàn bộ độ phân giải của màn hình theo điểm, vì vậy, điển hình nhất sẽ là 320x480 cho iPhone. Mặc dù iPhone4 có kích thước màn hình lớn hơn nhiều nhưng iOS vẫn trả lại 320x480 thay vì 640x960. Điều này chủ yếu là do các ứng dụng cũ phá vỡ.

CGFloat screenScale = [[UIScreen mainScreen] scale];

Điều này sẽ cung cấp cho bạn quy mô của màn hình. Đối với tất cả các thiết bị không có Màn hình Retina, điều này sẽ trả về 1.0f, trong khi các thiết bị Hiển thị Retina sẽ cho 2.0f và iPhone 6 Plus (Retina HD) sẽ cho 3.0f.

Bây giờ nếu bạn muốn lấy chiều rộng và chiều cao pixel của màn hình thiết bị iOS, bạn chỉ cần thực hiện một điều đơn giản.

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

Bằng cách nhân với tỷ lệ của màn hình, bạn sẽ có được độ phân giải pixel thực tế.

Đọc tốt về sự khác biệt giữa các điểm và pixel trong iOS có thể được đọc ở đây .

EDIT: (Phiên bản cho Swift)

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

4
Ngoại trừ việc điều này không hoàn toàn là độ phân giải 'pixel thực tế' trong trường hợp iPhone 6 Plus. Đó là độ phân giải, mọi thứ được hiển thị ở (ngoại trừ OpenGL) theo mã, với tỷ lệ 3x, nhưng sau đó được lấy mẫu nội bộ xuống độ phân giải gốc của màn hình là 1080 x 1920. Một trong nhiều giải thích hay tại liên kết
RobP

Đáng buồn thay, điều này sẽ không cung cấp cho bạn kích thước "thật" của các yếu tố trên màn hình, vì các khái niệm "điểm" và "tỷ lệ" của Apple chỉ là một xấp xỉ. (Xem thông số kỹ thuật trên iPhone vs iPad vs iPad mini.) Có lẽ để giảm số lượng kết hợp khác nhau tồn tại. Tôi nghĩ rằng iPhone 6 Plus đặc biệt xa.
ToolmakerSteve

Trên thực tế 6+ không quá xa: chiều cao 736 pts / 160 (pt / in) = 4,60 "chiều cao logic; chiều cao màn hình thực tế là 4,79"; Lỗi 5%. iPad ở xa hơn nhiều: chiều cao 1024 pts / 160 (pt / in) = 6,40 "chiều cao logic; chiều cao màn hình thực tế là 7,76"; Lỗi 20%. iPad mini vẫn ổn; Nó phù hợp với mật độ iPhone ban đầu. Đối với hầu hết các mục đích, điều này có nghĩa là người ta nên kiểm tra phần mềm iPad trên iPad mini (để đảm bảo có thể sử dụng được), sau đó chỉ cần bỏ qua thực tế là hầu hết các iPad đều phóng to hình ảnh lên 20% (so với iPhone hoặc iPad mini).
ToolmakerSteve

1
@RobP vậy làm thế nào để bạn giải quyết điều này cho iPhone 6 Plus?
Crashalot

1
@Crashalot không chắc ý của bạn là 'giải quyết cái này'? Nó phụ thuộc vào mục đích bạn có trong đầu khi bạn đạt được độ phân giải màn hình. Theo như các lập trình viên quan tâm, câu trả lời của Jman012 là chính xác và bạn kết xuất thành không gian 1242x2208 hoặc 2208x1242. Heck, đó thậm chí là độ phân giải chúng tôi cung cấp hình ảnh khởi động tại. Thực tế là phần cứng sau đó lấy mẫu hình ảnh này và hiển thị nó trên màn hình vật lý với số pixel nhỏ hơn sẽ là một 'chi tiết triển khai' mà mã của chúng tôi thậm chí không nên biết.
RobP

21

Lớp UIScreen cho phép bạn tìm độ phân giải màn hình theo Điểm và Điểm.

Độ phân giải màn hình được đo bằng Điểm hoặc Điểm ảnh. Không bao giờ nên nhầm lẫn với kích thước màn hình. Một kích thước màn hình nhỏ hơn có thể có độ phân giải cao hơn.

Kích thước hình chữ nhật của UIScreen là 'bound. Thong' nhập mô tả hình ảnh ở đây

Kích thước hình chữ nhật trả về 'localBound. Thong' của UIScreen bằng Pixels. Giá trị này được phát hiện là PPI (Điểm trên mỗi inch). Hiển thị độ sắc nét & rõ nét của Hình ảnh trên thiết bị. nhập mô tả hình ảnh ở đây

Bạn có thể sử dụng lớp UIScreen để phát hiện tất cả các giá trị này.

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)")

Bảng điều khiển

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0

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

Mục tiêu

// 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

8

Sử dụng nó trong App Delegate: Tôi đang sử dụng bảng phân cảnh

- (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;
 }

5

Đối với iOS 8, chúng ta chỉ có thể sử dụng cái này [UIScreen mainScreen].nativeBounds, như thế:

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

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

4

Xem UIScreen tham khảo: 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");
}

thanx để trả lời nếu tôi đặt nó trong NSLog (@ "% d", [[UIScreen mainScreen] scale]); nó cho 0 ...... và NSLog (@ "% @", [[UIScreen mainScreen] scale]); nó cung cấp cho chúng tôi Xin vui lòng cho tôi biết làm thế nào để có được độ phân giải màn hình hoặc làm thế nào để kiểm tra xem nó có cho độ phân giải chính xác trong khi chạy nó trên trình giả lập hay không
ios

2
thửNSLog(@"%f",[[UIScreen mainScreen] scale]);
vikingosegundo

0

Sử dụng mã này, nó sẽ giúp nhận được bất kỳ loại độ phân giải màn hình của thiết bị

 [[UIScreen mainScreen] bounds].size.height
 [[UIScreen mainScreen] bounds].size.width
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.