2014-09-20 17 views

Trả lời

7

[UIScreen mainScreen].currentMode báo cáo:

<UIScreenMode: 0x17802f240; size = 1242.000000 x 2208.000000> // STANDARD 
<UIScreenMode: 0x178226be0; size = 1125.000000 x 2001.000000> // ZOOMED 
7

Có một thành viên mới

[[UIScreen mainScreen] nativeScale] 

mà nên làm những gì bạn muốn. Đó là chỉ có sẵn trên iOS 8, vì vậy bạn sẽ cần phải bảo vệ nó

+1

này đã làm việc cho tôi! Chỉ cần thêm mainScreen(). "UIScreen.mainScreen(). NativeScale". Rất hữu ích khi tải hình ảnh từ dịch vụ web theo chiều rộng và chiều cao của chúng và vào chế độ xem hình ảnh: D – nmdias

11

Các mã sau đây có thể được sử dụng để có được bounds, coordinateSpace, nativeScalescale, tức là trên một chiếc iPhone 6 Plus nativeScale là 2,608 và khi thiết bị trong chạy trong chế độ thu nhỏ cho nó là 2,88 (lưu ý rằng nó là khác nhau trong mô phỏng):

UIScreen *mainScreen = [UIScreen mainScreen]; 
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f", 
      NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale); 

Mã để phát hiện iPhone 6 Plus:

-(BOOL)iPhone6PlusDevice{ 
    // Scale is 3 currently only for iPhone 6 Plus 
    if ([UIScreen mainScreen].scale > 2.9) return YES; 
    return NO; 
} 

hoặc

-(BOOL)iPhone6PlusUnZoomed{ 
     if ([self iPhone6PlusDevice]){ 
      if ([UIScreen mainScreen].bounds.size.height > 720.0) return YES; // Height is 736, but 667 when zoomed. 
     } 
     return NO; 
    } 

Lưu ý: Nếu bạn đang kiểm tra iPhone 6 Plus, để điều chỉnh giao diện người dùng, đừng dựa vào .nativeScale, vì trình mô phỏng và thiết bị thực tế cho kết quả khác nhau.

+2

Tôi đang chạy tiện ích mở rộng của mình trong ứng dụng Tin nhắn mới đã được cập nhật đúng cho kích thước màn hình mới trong iOS8 (ví dụ: không 'thu nhỏ') và 'screenScale: 3.000000' và' nativeScale: 2.608696' – barfoon

+0

@barfoon độ phân giải màn hình được báo cáo là gì? Khi tôi sống ở một quốc gia không có cửa hàng Apple, tôi đã không thể mua iPhone 6 Plus mới. –

+0

nativeScale không liên quan đến việc ứng dụng có đang chạy ở chế độ được thu nhỏ hay không: http://stackoverflow.com/questions/25871858/what-is-the-difference-between-nativescale-and-scale-on- uiscreen-in-ios8 – HHHH

5

Tùy chọn này được sử dụng để phát hiện thiết bị iPhone.

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0) 
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0) 
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f) 
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0) 
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0) 
+0

Vì iOS 8 '[Màn hình chính UIScreen] .bounds.size' trở thành phụ thuộc vào định hướng và các macro này bị hỏng ở chế độ nằm ngang. Có thể được cố định bằng cách sử dụng MAX (chiều rộng, chiều cao) để so sánh giá trị. Vui lòng xem câu trả lời của tôi bên dưới. – xZenon

5

macro Cập nhật từ Paula Chavarría của answer dành cho iOS 8 (nơi [UIScreen mainScreen].bounds.size là hướng phụ thuộc):

#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_5 (IS_IPHONE && (MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0) && ((IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) || !IS_OS_8_OR_LATER)) 
#define IS_STANDARD_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) 
#define IS_ZOOMED_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale > [UIScreen mainScreen].scale) 
#define IS_STANDARD_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 736.0) 
#define IS_ZOOMED_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale < [UIScreen mainScreen].scale) 
#define IS_IPHONE_6 (IS_STANDARD_IPHONE_6 || IS_ZOOMED_IPHONE_6) 
#define IS_IPHONE_6_PLUS (IS_STANDARD_IPHONE_6_PLUS || IS_ZOOMED_IPHONE_6_PLUS) 
Các vấn đề liên quan