Trang web của Apple tuyên bố rằng độ phân giải là 1080p: 1920 x 1080
Tuy nhiên, màn hình khởi chạy theo yêu cầu của Xcode (8.0 GM ra mắt ngày hôm nay) là 2208 x 1242.
Ai đúng
Trang web của Apple tuyên bố rằng độ phân giải là 1080p: 1920 x 1080
Tuy nhiên, màn hình khởi chạy theo yêu cầu của Xcode (8.0 GM ra mắt ngày hôm nay) là 2208 x 1242.
Ai đúng
Câu trả lời:
IPhone 6+ kết xuất nội bộ bằng cách sử dụng tài sản @ 3x ở độ phân giải ảo 2208 × 1242 (với 736x414 điểm), sau đó lấy mẫu để hiển thị. Giống như sử dụng độ phân giải tỷ lệ trên MacBook Retina - nó cho phép chúng đạt được bội số tổng thể cho các tài sản pixel trong khi vẫn có văn bản ví dụ 12 pt trông giống kích thước trên màn hình.
Vì vậy, vâng, các màn hình khởi động cần phải có kích thước đó.
6, 5s, 5, 4s và 4 đều là 326 pixel mỗi inch và sử dụng tài sản @ 2x để bám sát khoảng 160 điểm trên mỗi inch của tất cả các thiết bị trước đó.
6+ là 401 pixel mỗi inch. Vì vậy, theo giả thuyết, nó cần khoảng @ 2,46 lần tài sản. Thay vào đó, Apple sử dụng tài sản @ 3x và thu nhỏ sản lượng hoàn chỉnh xuống còn khoảng 84% kích thước tự nhiên.
Trong thực tế, Apple đã quyết định sử dụng hơn 87%, biến 1080 thành 1242. Không còn nghi ngờ gì nữa, đó là tìm ra thứ gì đó gần nhất có thể đến 84% mà vẫn tạo ra kích thước tách rời theo cả hai hướng - chính xác là 1242/1080 = 2208/1920 , trong khi nếu bạn biến 1080 thành 1286, bằng cách nào đó, bạn cần phải hiển thị 2286,22 pixel theo chiều dọc để mở rộng tốt.
[UIScreen mainScreen].bounds.size.height
trả về 736 trong trình giả lập iPhone 6+ khi ở chế độ dọc. Đây là giá trị 2208 chia cho tỷ lệ 3. Chiều rộng là 414.
Câu trả lời là các ứng dụng cũ hơn chạy ở Chế độ thu phóng 2208 x 1242. Nhưng khi một ứng dụng được xây dựng cho điện thoại mới, các độ phân giải có sẵn là: Super Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi) , Retina HD 5.5 ( iPhone 6, 7, 8 Plus ) 1242 x 2208 và Retina HD 4.7 ( iPhone 6 ) 750 x 1334 . Điều này gây ra sự nhầm lẫn được đề cập trong câu hỏi. Để xây dựng các ứng dụng sử dụng kích thước toàn màn hình của điện thoại mới, hãy thêm LaunchImages theo các kích thước: 1125 x 2436, 1242 x 2208, 2208 x 1242 và 750 x 1334.
Kích thước cho iPhone 11 Pro Max với tỷ lệ @ 3x , không gian tọa độ: 414 x 896 điểm và 1242 x 2688 pixel, 458 ppi, kích thước vật lý của thiết bị là 3.06 x 6.22 in hoặc 77.8 x 158.0 mm. Màn hình XDR Super Retina 6.5 ".
Kích thước cho iPhone 11 Pro với tỷ lệ @ 3x , không gian tọa độ: 375 x 812 điểm và 1125 x 2436 pixel, 458 ppi, kích thước vật lý của thiết bị là 2,81 x 5,67 in hoặc 71,4 x 144,0 mm. Màn hình XDR Super Retina 5,8 ".
Kích thước cho iPhone 11 với tỷ lệ @ 2x , không gian tọa độ: 414 x 896 điểm và 828 x 1792 pixel, 326 ppi, kích thước vật lý của thiết bị là 2,98 x 5,94 in hoặc 75,7 x 150,9 mm. 6.1 "Màn hình Retina HD lỏng.
Kích thước cho iPhone X🅂 Max với tỷ lệ @ 3x (Tên Apple: màn hình Super Retina HD 6.5 " ), không gian tọa độ: 414 x 896 điểm và 1242 x 2688 pixel, 458 ppi, kích thước vật lý của thiết bị là 3.05 x 6.20 in hoặc 77.4 x 157.5 mm.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅂 Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0
Kích thước cho iPhone X🅁 với tỷ lệ @ 2x (tên Apple: màn hình Super Retina HD 6.1 " ), không gian tọa độ: 414 x 896 điểm và 828 x 1792 pixel, 326 ppi, kích thước vật lý của thiết bị là 2,98 x 5,94 in hoặc 75,7 x 150,9 mm .
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅁 Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0
Kích thước cho iPhone X🅂 và iPhone X với tỷ lệ @ 3x (tên Apple: màn hình Super Retina HD 5,8 " ), không gian tọa độ: 375 x 812 điểm và 1125 x 2436 pixel, 458 ppi, kích thước vật lý của thiết bị là 2,79 x 5,65 in hoặc 70,9 x 143,6 mm.
let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅂 and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0
Kích thước cho iPhone 6, 6S, 7 và 8 với tỷ lệ @ 3x (tên Apple: Retina HD 5.5 ), không gian tọa độ: 414 x 736 điểm và 1242 x 2208 pixel, 401 ppi, kích thước vật lý màn hình là 2,7 x 4,8 hoặc 68 x 122 mm . Khi chạy ở Chế độ phóng to, tức là không có LaunchImages mới hoặc được chọn trong Cài đặt trên iPhone 6 Plus, tỷ lệ gốc là 2,88 và màn hình là 320 x 568 điểm, đó là kích thước gốc của iPhone 5:
Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}};
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000
Kích thước cho iPhone 6 và iPhone 6S với tỷ lệ @ 2x (tên Apple: Retina HD 4.7 ), không gian tọa độ: 375 x 667 điểm và 750 x 1334 pixel, 326 ppi, kích thước vật lý màn hình là 2,3 x 4,1 hoặc 58 x 104 mm . Khi chạy ở Chế độ phóng to, tức là không có LaunchImages mới, màn hình có kích thước 320 x 568 điểm, đó là kích thước gốc của iPhone 5:
Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}};
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000
Và iPhone 5 để so sánh là 640 x 1136, iPhone 4 640 x 960.
Đây là đoạn mã tôi đã sử dụng để kiểm tra điều này (lưu ý rằng localScale chỉ chạy trên iOS 8):
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);
Lưu ý: Tải lên LaunchImages nếu không ứng dụng sẽ chạy ở Chế độ phóng to và không hiển thị tỷ lệ chính xác hoặc kích thước màn hình. Trong Chế độ phóng to, nativeScale
và scale
sẽ không giống nhau. Trên một thiết bị thực tế, tỷ lệ có thể là 2.608 trên iPhone 6 Plus, ngay cả khi nó không chạy ở Chế độ thu phóng, nhưng nó sẽ hiển thị tỷ lệ 3.0 khi chạy trên trình giả lập.
Độ phân giải thực của iPhone 6 Plus là 1920x1080 nhưng trong Xcode, bạn tạo giao diện cho độ phân giải 2208x1242 (736x414 điểm) và trên thiết bị, nó được tự động thu nhỏ xuống 1920x1080 pixel.
iPhone độ phân giải tham khảo nhanh:
Device Points Pixels Scale Physical Pixels PPI Ratio Size
iPhone XS Max 896x414 2688x1242 3x 2688x1242 458 19.5:9 6.5"
iPhone XR 896x414 1792x828 2x 1792x828 326 19.5:9 6.1"
iPhone X 812x375 2436x1125 3x 2436x1125 458 19.5:9 5.8"
iPhone 6 Plus 736x414 2208x1242 3x 1920x1080 401 16:9 5.5"
iPhone 6 667x375 1334x750 2x 1334x750 326 16:9 4.7"
iPhone 5 568x320 1136x640 2x 1136x640 326 16:9 4.0"
iPhone 4 480x320 960x640 2x 960x640 326 3:2 3.5"
iPhone 3GS 480x320 480x320 1x 480x320 163 3:2 3.5"
Có lẽ bạn nên ngừng sử dụng các hình ảnh khởi chạy trong iOS 8 và sử dụng bảng phân cảnh hoặc nib / xib.
Trong Xcode 6 , mở File
menu và chọn New
⟶ File...
⟶ iOS
⟶ User Interface
⟶ Launch Screen
.
Sau đó mở các cài đặt cho dự án của bạn bằng cách nhấp vào nó.
Trong General
tab, trong phần gọi App Icons and Launch Images
, thiết lập Launch Screen File
để các tập tin bạn vừa tạo ra (điều này sẽ thiết lập UILaunchStoryboardName
trong info.plist
).
Lưu ý rằng hiện tại trình giả lập sẽ chỉ hiển thị màn hình đen, vì vậy bạn cần kiểm tra trên thiết bị thực .
Thêm tệp xib khởi động vào dự án của bạn:
Định cấu hình dự án của bạn để sử dụng tệp xib Launch Screen thay vì Danh mục tài sản:
Trên thiết bị vật lý, giới hạn màn hình chính của iPhone 6 Plus là 2208x1242 và bản gốc là 1920x1080 . Có tỷ lệ phần cứng liên quan để thay đổi kích thước để hiển thị vật lý.
Trên trình giả lập, giới hạn và bản gốc của màn hình chính của iPhone 6 Plus đều là 2208x1242.
Nói cách khác ... Video, OpenGL và những thứ khác dựa trên CALayers
thỏa thuận với pixel đó sẽ xử lý bộ đệm khung 1920x1080 thực trên thiết bị (hoặc 2208x1242 trên sim). Những thứ liên quan đến điểm trong UIKit
sẽ được xử lý với giới hạn 2208x1242 (x3) và được thu nhỏ khi thích hợp trên thiết bị.
Trình giả lập không có quyền truy cập vào cùng một phần cứng đang thực hiện chia tỷ lệ trên thiết bị và thực sự không có nhiều lợi ích để mô phỏng nó trong phần mềm vì chúng tạo ra kết quả khác với phần cứng. Do đó, điều hợp lý là đặt nativeBounds
màn hình chính của thiết bị mô phỏng thành giới hạn của màn hình chính của thiết bị vật lý.
iOS 8 đã thêm API vào UIScreen
( nativeScale
và nativeBounds
) để cho phép nhà phát triển xác định độ phân giải CADisplay
tương ứng với UIScreen
.
Đối với những người như tôi, những người tự hỏi làm thế nào các ứng dụng cũ được xử lý, tôi đã làm một chút thử nghiệm và tính toán về chủ đề này.
Nhờ gợi ý @ hannes-sverrisson, tôi bắt đầu với giả định rằng một ứng dụng cũ được xử lý với chế độ xem 320x568 trong iPhone 6 và iPhone 6 plus.
Thử nghiệm được thực hiện với nền đen đơn giản bg@2x.png
với viền trắng. Nền có kích thước 640x1136 pixel và có màu đen với viền trắng bên trong là 1 pixel.
Dưới đây là các ảnh chụp màn hình được cung cấp bởi trình giả lập:
Trên ảnh chụp màn hình iPhone 6, chúng ta có thể thấy lề 1 pixel ở trên và dưới của viền trắng và lề 2 pixel trên ảnh chụp màn hình iPhone 6 plus. Điều này mang lại cho chúng ta không gian sử dụng 1242x2204 trên iPhone 6 plus, thay vì 1242x2208 và 750x1332 trên iPhone 6, thay vì 750x1334.
Chúng tôi có thể giả định rằng những pixel chết đó có nghĩa là tôn trọng tỷ lệ khung hình của iPhone 5:
iPhone 5 640 / 1136 = 0.5634
iPhone 6 (used) 750 / 1332 = 0.5631
iPhone 6 (real) 750 / 1334 = 0.5622
iPhone 6 plus (used) 1242 / 2204 = 0.5635
iPhone 6 plus (real) 1242 / 2208 = 0.5625
Thứ hai, điều quan trọng cần biết là tài nguyên @ 2x sẽ được thu nhỏ không chỉ trên iPhone 6 plus (dự kiến tài sản @ 3x), mà còn trên iPhone 6. Điều này có thể là do không mở rộng tài nguyên sẽ dẫn đến bố cục không mong muốn, do để mở rộng tầm nhìn.
Tuy nhiên, tỷ lệ đó không tương đương về chiều rộng và chiều cao. Tôi đã thử nó với tài nguyên 264x264 @ 2x. Đưa ra kết quả, tôi phải giả định rằng tỷ lệ tỷ lệ thuận với tỷ lệ pixel / điểm.
Device Width scale Computed width Screenshot width
iPhone 5 640 / 640 = 1.0 264 px
iPhone 6 750 / 640 = 1.171875 309.375 309 px
iPhone 6 plus 1242 / 640 = 1.940625 512.325 512 px
Device Height scale Computed height Screenshot height
iPhone 5 1136 / 1136 = 1.0 264 px
iPhone 6 1332 / 1136 = 1.172535 309.549 310 px
iPhone 6 plus 2204 / 1136 = 1.940141 512.197 512 px
Điều quan trọng cần lưu ý là tỷ lệ iPhone 6 không giống nhau về chiều rộng và chiều cao (309x 310). Điều này có xu hướng xác nhận lý thuyết trên rằng tỷ lệ không tỷ lệ về chiều rộng và chiều cao, nhưng sử dụng tỷ lệ pixel / điểm.
Tôi hi vọng cái này giúp được.
Kiểm tra infographic này: http : //www.paintcodản.com / news / iphone-6-sc Greens-emystified
Nó giải thích sự khác biệt giữa iPhone cũ, iPhone 6 và iPhone 6 Plus. Bạn có thể xem so sánh kích thước màn hình theo điểm, pixel được hiển thị và pixel vật lý. Bạn cũng sẽ tìm thấy câu trả lời cho câu hỏi của bạn ở đó:
iPhone 6 Plus - với màn hình Retina HD. Hệ số tỷ lệ là 3 và hình ảnh sau đó được thu nhỏ từ 2208 × 1242 pixel được hiển thị xuống 1920 × 1080 pixel.
Tỷ lệ thu nhỏ là 1920/258 = 1080/1242 = 20 / 23. Điều đó có nghĩa là cứ 23 pixel từ kết xuất ban đầu phải được ánh xạ tới 20 pixel vật lý. Nói cách khác, hình ảnh được thu nhỏ lại khoảng 87% kích thước ban đầu của nó.
Cập nhật:
Có một phiên bản cập nhật của infographic đã đề cập ở trên. Nó chứa thông tin chi tiết hơn về sự khác biệt độ phân giải màn hình và nó bao gồm tất cả các mẫu iPhone cho đến nay, bao gồm cả các thiết bị 4 inch.
http: //www.paintcod OK.com/news/ultimate-guide-to-iphone-resolutions
Ngay cả khi tôi thường không thích giai điệu của blog Daring Fireball của John Gruber, thì phỏng đoán hiển thị iPhone lớn hơn của anh ấy rất đáng để đọc.
Anh ta đoán nhưng có chính xác cả độ phân giải về điểm và pixel cho cả hai model, ngoại trừ việc anh ta (tôi cũng không) mong đợi Apple xây dựng màn hình vật lý có độ phân giải nhỏ hơn và thu nhỏ lại (chi tiết trong câu trả lời của @ Tommy).
Điểm chính của tất cả là người ta nên ngừng suy nghĩ về pixel và bắt đầu suy nghĩ về điểm (điều này đã xảy ra trong một thời gian khá lâu, nó không phải là một phát minh gần đây) và dẫn đến kích thước vật lý của các yếu tố UI. Nói tóm lại, cả hai mẫu iPhone mới đều cải thiện về mặt vật lý này vì hầu hết các yếu tố vật lý vẫn giữ nguyên kích thước, bạn có thể vừa với chúng hơn trên màn hình (đối với mỗi màn hình lớn hơn bạn có thể phù hợp hơn).
Tôi hơi thất vọng vì họ đã không tiếp tục ánh xạ độ phân giải bên trong sang độ phân giải màn hình thực tế 1: 1 cho model lớn hơn.