เว็บไซต์ของ Apple อ้างว่ามีความละเอียด 1080p: 1920 x 1080
อย่างไรก็ตามหน้าจอเปิดตัวที่ต้องการโดย Xcode (8.0 GM เปิดตัวในวันนี้) คือ 2208 x 1242
ถูกต้องใคร
เว็บไซต์ของ Apple อ้างว่ามีความละเอียด 1080p: 1920 x 1080
อย่างไรก็ตามหน้าจอเปิดตัวที่ต้องการโดย Xcode (8.0 GM เปิดตัวในวันนี้) คือ 2208 x 1242
ถูกต้องใคร
คำตอบ:
iPhone 6+ แสดงผลภายในโดยใช้สินทรัพย์@ 3xที่ความละเอียดเสมือน2208 × 1242 (มี736x414คะแนน) จากนั้นสุ่มตัวอย่างเพื่อแสดงผล เช่นเดียวกับการใช้ความละเอียดที่ปรับขนาดใน Retina MacBook - มันช่วยให้พวกเขาตีหลายรายการสำหรับสินทรัพย์พิกเซลในขณะที่ยังคงมีเช่นข้อความ 12 pt ดูขนาดเท่ากันบนหน้าจอ
ดังนั้นใช่หน้าจอเรียกใช้ต้องมีขนาดนั้น
6, 5 วินาที, 5, 4s และ 4 มีทั้งหมด 326 พิกเซลต่อนิ้วและใช้ @ สินทรัพย์ 2x ติดกับประมาณ 160 จุดต่อนิ้วของอุปกรณ์ก่อนหน้านี้ทั้งหมด
6+ คือ 401 พิกเซลต่อนิ้ว ดังนั้นสมมุติว่าต้องการสินทรัพย์ @ 2.46 เท่าโดยประมาณ Apple ใช้สินทรัพย์ @ 3x และลดขนาดเอาต์พุตสมบูรณ์ลงเหลือประมาณ 84% ของขนาดธรรมชาติ
ในทางปฏิบัติ Apple ได้ตัดสินใจที่จะมีมากขึ้นเช่น 87% เปลี่ยน 1080 เป็น 1242 ไม่ต้องสงสัยเลยว่าจะหาอะไรที่ใกล้เคียงที่สุดที่ 84% ที่ยังคงผลิตขนาดที่สมบูรณ์ทั้งสองทิศทาง - 1242/1080 = 2208/1920 ในขณะที่ถ้าคุณเปลี่ยน 1080 ให้เป็น 1286 คุณจะต้องแสดงผล 2286.22 พิกเซลในแนวตั้งเพื่อปรับขนาดให้ดี
[UIScreen mainScreen].bounds.size.height
ส่งคืน 736 ในตัวจำลอง iPhone 6+ เมื่ออยู่ในแนวตั้ง นี่คือค่า 2208 หารด้วยสเกล 3 ความกว้างคือ 414
คำตอบก็คือแอปรุ่นเก่าทำงานในโหมดซูม 2208 x 1242 แต่เมื่อแอพสร้างขึ้นสำหรับโทรศัพท์รุ่นใหม่ความละเอียดที่มีคือSuper Retina HD 5.8 (iPhone X) 1125 x 2436 (458ppi) , Retina HD 5.5 ( iPhone 6, 7, 8 Plus ) 1242 x 2208และRetina HD 4.7 ( iPhone 6 ) 750 x 1334 สิ่งนี้ทำให้เกิดความสับสนที่กล่าวถึงในคำถาม ในการสร้างแอปที่ใช้ขนาดเต็มหน้าจอของโทรศัพท์ใหม่ให้เพิ่ม LaunchImages ในขนาด: 1125 x 2436, 1242 x 2208, 2208 x 1242 และ 750 x 1334
ขนาดสำหรับiPhone 11 Pro Maxพร้อมการขยาย@ 3 x , พิกัดพื้นที่: 414 x 896จุดและ1242 x 2688พิกเซล, 458 ppi, ขนาดทางกายภาพของอุปกรณ์คือ 3.06 x 6.22 หรือ 77.8 x 158.0 มม. จอแสดงผล Super Retina XDR 6.5 "
ขนาดสำหรับiPhone 11 Pro ที่มีการปรับขนาด@ 3 xพิกัดพื้นที่375 x 812จุดและ1125 x 2436พิกเซล, 458 ppi, ขนาดทางกายภาพของอุปกรณ์คือ 2.81 x 5.67 หรือ 71.4 x 144.0 มม. จอแสดงผล Super Retina XDR 5.8 "
ขนาดสำหรับiPhone 11 ที่มีการปรับขนาด@ 2xพิกัดพื้นที่: 414 x 896จุดและ828 x 1792พิกเซล, 326 ppi, ขนาดทางกายภาพของอุปกรณ์คือ 2.98 x 5.94 หรือ 75.7 x 150.9 มม. 6.1 "Liquid Retina HD display
ขนาดสำหรับiPhone X🅂สูงสุดพร้อมการขยาย@ 3x (ชื่อ Apple: Super Retina HD 6.5 display " ) พิกัดพื้นที่: 414 x 896จุดและ1242 x 2688พิกเซล 458 ppi ขนาดทางกายภาพของอุปกรณ์คือ 3.05 x 6.20 หรือ 77.4 x 157.5 มิลลิเมตร
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
ขนาดสำหรับiPhone X🅁ที่มีการปรับ@ 2x (ชื่อของ Apple: จอแสดงผล Super Retina HD 6.1 " ), พื้นที่ประสานงาน: 414 x 896จุดและ828 x 1792พิกเซล, 326 ppi, ขนาดทางกายภาพของอุปกรณ์คือ 2.98 x 5.94 หรือ 75.7 x 150.9 มม. .
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
ขนาดสำหรับiPhone X🅂และiPhone Xพร้อมมาตราส่วน@ 3x (ชื่อ Apple: จอแสดงผล Super Retina HD 5.8 " ) พิกัดพื้นที่: 375 x 812จุดและ1125 x 2436พิกเซล, 458 ppi ขนาดอุปกรณ์ทางกายภาพเท่ากับ 2.79 x 5.65 หรือ 70.9 x 143.6 มม.
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
ขนาดสำหรับiPhone 6, 6S, 7 และ 8 ที่มี@ 3x scaling (ชื่อ Apple: Retina HD 5.5 ), พิกัดพื้นที่: 414 x 736จุดและ1242 x 2208พิกเซล, 401 ppi, ขนาดหน้าจอ 2.7 x 4.8 นิ้วหรือ68 x 122 มม . เมื่อทำงานในโหมด Zoomed คือไม่มี LaunchImages ใหม่หรือเลือกในการตั้งค่าบน iPhone 6 Plus ขนาดดั้งเดิมคือ 2.88 และหน้าจอคือ 320 x 568 จุดซึ่งเป็นขนาดดั้งเดิมของ 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
ขนาดสำหรับiPhone 6และiPhone 6S ที่มีการวัด @ 2x (ชื่อ Apple: Retina HD 4.7 ) พิกัดพื้นที่: 375 x 667จุดและ750 x 1334พิกเซล, 326 ppi ขนาดหน้าจอ 2.3 x 4.1 นิ้วหรือ58 x 104 มม . เมื่อทำงานในโหมด Zoomed คือไม่มี LaunchImages ใหม่หน้าจอคือ 320 x 568 จุดซึ่งเป็นขนาดดั้งเดิมของ 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
และiPhone 5สำหรับการเปรียบเทียบคือ 640 x 1136, iPhone 4 640 x 960
นี่คือรหัสที่ฉันใช้ในการตรวจสอบนี้ (โปรดทราบว่า nativeScale ทำงานบน iOS 8 เท่านั้น):
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);
หมายเหตุ: อัปโหลด LaunchImages มิฉะนั้นแอปจะทำงานในโหมดซูมและไม่แสดงขนาดที่ถูกต้องหรือขนาดหน้าจอ ในโหมดซูมnativeScale
และscale
จะไม่เหมือนกัน บนอุปกรณ์จริงสเกลสามารถเป็น 2.608 บน iPhone 6 Plus แม้ว่ามันจะไม่ได้ทำงานในโหมดซูม แต่มันจะแสดงสเกลของ 3.0 เมื่อทำงานบนเครื่องจำลอง
ความละเอียดจริง / ทางกายภาพ iPhone 6 Plus คือ 1920x1080 แต่ใน Xcode คุณสร้างอินเทอร์เฟซของคุณสำหรับความละเอียด 2208x1242 (736x414 คะแนน) และบนอุปกรณ์จะถูกลดขนาดลงเป็น 1920x1080 พิกเซลโดยอัตโนมัติ
การอ้างอิงความละเอียด iPhone อย่างรวดเร็ว:
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"
คุณควรหยุดใช้อิมเมจเปิดตัวใน iOS 8 และใช้สตอรี่บอร์ดหรือ nib / xib
ในXcode 6เปิดFile
เมนูและเลือกNew
⟶ File...
⟶ iOS
⟶ ⟶User Interface
Launch Screen
จากนั้นเปิดการตั้งค่าสำหรับโครงการของคุณโดยคลิกที่มัน
ในGeneral
แท็บในส่วนที่เรียกว่าApp Icons and Launch Images
ตั้งค่าLaunch Screen File
เป็นไฟล์ที่คุณเพิ่งสร้างขึ้น (สิ่งนี้จะตั้งค่าUILaunchStoryboardName
ในinfo.plist
)
โปรดทราบว่าเวลาที่ถูกจำลองจะแสดงหน้าจอสีดำดังนั้นคุณจำเป็นต้องทดสอบบนอุปกรณ์จริง
การเพิ่มไฟล์ xib ของหน้าจอเรียกใช้ลงในโครงการของคุณ:
การกำหนดค่าโครงการของคุณให้ใช้ไฟล์ xib ของหน้าจอเรียกใช้แทนแค็ตตาล็อกสินทรัพย์:
บนอุปกรณ์ทางกายภาพขอบเขตหน้าจอหลักของ iPhone 6 พลัสเป็น2208x1242และ nativeBounds เป็น1920x1080 มีการปรับขนาดฮาร์ดแวร์ที่เกี่ยวข้องเพื่อปรับขนาดเป็นจอแสดงผลทางกายภาพ
ในการจำลองขอบเขตหน้าจอหลักของ iPhone 6 Plus และขอบเขตดั้งเดิมมีทั้ง 2208x1242
กล่าวอีกนัยหนึ่ง ... วิดีโอ, OpenGL และสิ่งอื่น ๆCALayers
ที่เกี่ยวข้องกับพิกเซลนั้นจะจัดการกับเฟรมบัฟเฟอร์จริงขนาด1920x1080บนอุปกรณ์ (หรือ2208x1242บนซิม) สิ่งต่าง ๆ ที่เกี่ยวข้องกับคะแนนUIKit
จะได้รับการจัดการกับขอบเขต 2208x1242 (x3) และปรับขนาดตามความเหมาะสมบนอุปกรณ์
เครื่องมือจำลองไม่สามารถเข้าถึงฮาร์ดแวร์เดียวกันกับที่ทำในอุปกรณ์และมีประโยชน์ไม่มากในการจำลองในซอฟต์แวร์เนื่องจากพวกเขาต้องการผลลัพธ์ที่แตกต่างจากฮาร์ดแวร์ ดังนั้นจึงเหมาะสมที่จะตั้งค่าnativeBounds
หน้าจอหลักของอุปกรณ์จำลองเป็นขอบเขตของหน้าจอหลักของอุปกรณ์ทางกายภาพ
iOS 8 เพิ่ม API เพื่อUIScreen
( nativeScale
และnativeBounds
) เพื่อให้นักพัฒนาที่กำหนดความละเอียดของที่สอดคล้องกับCADisplay
UIScreen
สำหรับคนอย่างฉันที่สงสัยว่าแอปรุ่นเก่าได้รับการปฏิบัติอย่างไรฉันได้ทำการทดสอบและคำนวณในเรื่องนี้เล็กน้อย
ต้องขอบคุณ @ hannes-sverrisson hint ทำให้ฉันเริ่มสมมติว่าแอปรุ่นเก่าได้รับการดูแลด้วยมุมมอง 320x568 ใน iPhone 6 และ iPhone 6 plus
การทดสอบทำด้วยพื้นหลังสีดำเรียบง่ายbg@2x.png
พร้อมเส้นขอบสีขาว พื้นหลังมีขนาด 640x1136 พิกเซลและเป็นสีดำโดยมีขอบสีขาวด้านในเท่ากับ 1 พิกเซล
ด้านล่างนี้เป็นภาพหน้าจอของเครื่องมือจำลอง:
บนหน้าจอ iPhone 6 เราจะเห็นระยะขอบ 1 พิกเซลที่ด้านบนและด้านล่างของขอบสีขาวและขอบ 2 พิกเซลบนหน้าจอ iPhone 6 plus สิ่งนี้ทำให้เรามีพื้นที่ใช้งาน 1242x2204 บน iPhone 6 plus แทน 1242x2208 และ 750x1332 บน iPhone 6 แทนที่จะเป็น 750x1334
เราสามารถสรุปได้ว่าพิกเซลที่ตายแล้วเหล่านั้นมีความหมายต่อสัดส่วนของ 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
ประการที่สองสิ่งสำคัญคือต้องรู้ว่า @ 2x ทรัพยากรจะถูกปรับขนาดไม่เพียง แต่ใน iPhone 6 plus (ซึ่งคาดว่าจะเป็นสินทรัพย์ @ 3x) แต่ใน iPhone 6 อาจเป็นเพราะการปรับขนาดทรัพยากรจะทำให้รูปแบบที่ไม่คาดคิดเกิดขึ้น เพื่อขยายมุมมอง
อย่างไรก็ตามการปรับขนาดนั้นไม่เท่ากับความกว้างและความสูง ฉันลองด้วยทรัพยากร 264x264 @ 2x จากผลลัพธ์ที่ได้ฉันต้องสมมติว่าการปรับสเกลเป็นสัดส่วนโดยตรงกับอัตราส่วนพิกเซล / คะแนน
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
เป็นเรื่องสำคัญที่จะต้องทราบว่าการปรับขนาดของ iPhone 6 นั้นไม่เหมือนกันในด้านความกว้างและความสูง (309x310) สิ่งนี้มีแนวโน้มที่จะยืนยันทฤษฎีข้างต้นว่าการปรับขนาดไม่ใช่สัดส่วนในความกว้างและความสูง แต่ใช้อัตราส่วนพิกเซล / คะแนน
ฉันหวังว่านี่จะช่วยได้.
ลองใช้อินโฟกราฟิกนี้: http://www.paintcodeapp.com/news/iphone-6-screens-demystified
มันอธิบายความแตกต่างระหว่าง iPhone เก่า iPhone 6 และ iPhone 6 Plus คุณสามารถดูการเปรียบเทียบขนาดหน้าจอเป็นจุดพิกเซลที่แสดงผลและพิกเซลทางกายภาพ คุณจะพบคำตอบสำหรับคำถามของคุณที่นั่น:
iPhone 6 Plus - พร้อมจอแสดงผล Retina HD ตัวประกอบสเกลคือ 3 และภาพจะถูกปรับลดขนาดจาก 2208 × 1242 พิกเซลที่แสดงเป็น 1920 × 1080 พิกเซล
อัตราส่วนการลดอัตราการสุ่มคือ 1920/2208 = 1080/1242 = 20/23 ซึ่งหมายความว่าทุก 23 พิกเซลจากการเรนเดอร์ดั้งเดิมจะต้องถูกแมปกับ 20 ฟิสิคัลพิกเซล กล่าวคือภาพจะถูกลดขนาดลงเหลือประมาณ 87% ของขนาดดั้งเดิม
ปรับปรุง:
มีอินโฟกราฟิกรุ่นปรับปรุงที่กล่าวถึงข้างต้น มันมีข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับความแตกต่างของความละเอียดหน้าจอและครอบคลุมรุ่น iPhone ทั้งหมดจนถึงรวมถึงอุปกรณ์ 4 นิ้ว
http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
แม้ว่าโดยทั่วไปแล้วฉันจะไม่ชอบน้ำเสียงของบล็อก Daring Fireball ของ John Gruber แต่iPhone Display Conjecture ขนาดใหญ่ของเขาก็คุ้มค่าที่จะอ่าน
เขาเดาว่าถูกต้องทั้งคะแนนและพิกเซลสำหรับทั้งสองรุ่นยกเว้นว่าเขาไม่ได้คาดหวังว่าแอปเปิ้ลจะสร้างจอแสดงผลทางกายภาพที่มีความละเอียดขนาดเล็กลง
สิ่งสำคัญของมันคือเราควรหยุดคิดในแง่ของพิกเซลและเริ่มคิดในแง่ของคะแนน (เป็นกรณีนี้มาระยะหนึ่งแล้วไม่ใช่สิ่งประดิษฐ์ล่าสุด) และทำให้องค์ประกอบทางกายภาพขององค์ประกอบ UI มีขนาดจริง กล่าวโดยสรุป iPhone รุ่นใหม่ทั้งสองรุ่นปรับปรุงในเรื่องนี้เนื่องจากองค์ประกอบทางกายภาพส่วนใหญ่ยังคงมีขนาดเท่ากันคุณสามารถปรับขนาดให้พอดีกับหน้าจอได้
ฉันผิดหวังเล็กน้อยที่พวกเขาไม่ได้ทำการแมปความละเอียดภายในกับความละเอียดหน้าจอจริง 1: 1 สำหรับรุ่นที่ใหญ่กว่า