pt — คืออะไร, Points และการปรับขนาดใน iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-25 เวลาอ่าน: 8 นาที

pt — points, หน่วยวัดเชิงตรรกะใน iOS และ macOS ที่แยกอินเทอร์เฟซออกจากความละเอียดหน้าจอจริง หนึ่ง point เท่ากับหนึ่งพิกเซลบนหน้าจอที่ไม่ใช่ Retina (@1x) และสองหรือสามพิกเซลบน Retina (@2x, @3x) บทความนี้อธิบายหลักการทำงานของ pt, การปรับขนาดบนหน้าจอต่างๆ, การใช้ CGPoint และ UIFont.pointSize

ประเด็นสำคัญ

  • pt — จุดเชิงตรรกะของ iOS, ไม่ขึ้นกับความละเอียดหน้าจอจริง
  • @1x, @2x, @3x — ตัวคูณขนาดที่กำหนดว่าหนึ่งจุดมีกี่พิกเซล
  • CGPoint — โครงสร้างสำหรับพิกัดใน pt, พื้นฐานของการดำเนินการระบุตำแหน่งทั้งหมด
  • UIFont.pointSize — ขนาดฟอนต์เป็นจุด, ส่งคืนเป็น pt เสมอ
  • ระยะห่างจากหน้าจอ: iPhone 15 Pro — 1 pt = 3 px ที่ความหนาแน่นพิกเซล 460 PPI

pt ใน iOS คืออะไร?

pt (point) — หน่วยวัดเชิงตรรกะใน iOS ที่ช่วยให้นักพัฒนาสามารถอธิบายอินเทอร์เฟซในพิกัดนามธรรม ซึ่งไม่ขึ้นกับความละเอียดจริงของหน้าจอ Apple นำเสนอแนวคิดของ points พร้อมกับการเปิดตัว iPhone 4 และจอ Retina ในปี 2010 ก่อน Retina นักพัฒนาใช้พิกเซลโดยตรง — หนึ่งพิกเซล UI เท่ากับหนึ่งพิกเซลจริง

ระบบพิกัดของ iOS สร้างขึ้นบนจุด: จุด (0,0) อยู่ที่มุมซ้ายบนของหน้าจอ, แกน X ไปทางขวา, แกน Y ลงล่าง ขนาดหน้าจอเป็นจุดคงที่สำหรับอุปกรณ์แต่ละคลาส: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (แนวตั้ง), 1024×768 pt (แนวนอน) ความละเอียดจริง อาจเป็น 1179×2556 px (iPhone 15 Pro) — แต่นักพัฒนาทำงานกับจุด

ตาม Apple Human Interface Guidelines, จุดเป็นการทำให้เป็นนามธรรมพื้นฐานของ UIKit เฟรมเวิร์กทั้งหมด — UIKit, SwiftUI, Core Graphics, SpriteKit — ทำงานเป็นจุด การแปลงเป็นพิกเซลเกิดขึ้นโดยอัตโนมัติในขั้นตอนการเรนเดอร์ผ่าน UIScreen.nativeScale

ตัวคูณขนาด: @1x, @2x, @3x

ตัวคูณขนาด (scale factor) กำหนดว่ามีกี่พิกเซลจริงที่สอดคล้องกับหนึ่งจุดเชิงตรรกะ Apple ใช้สามระดับ: @1x — 1 pt = 1 px (iPad mini ไม่มี Retina, รุ่นเก่า), @2x — 1 pt = 2 px (iPhone ส่วนใหญ่ก่อนปี 2020, iPad Retina), @3x — 1 pt = 3 px (iPhone X และใหม่กว่า รวมถึง iPhone 15 Pro)

อุปกรณ์ขนาดเป็น ptขนาดเป็น pxสเกล
iPhone SE (เจเนอเรชันที่ 3)375 × 667750 × 1334@2x
iPhone 14390 × 8441170 × 2532@3x
iPhone 15 Pro Max430 × 9321290 × 2796@3x
iPad Pro 12.9"1024 × 13662048 × 2732@2x
iPad mini (เจเนอเรชันที่ 6)744 × 11331488 × 2266@2x

ค่า scale factor สามารถเข้าถึงได้ผ่าน UIScreen.main.scale (สำหรับ UIKit) และ @Environment(\.displayScale) (สำหรับ SwiftUI) ใช้เมื่อโหลดแอสเซท: ระบบจะเลือกรูปภาพที่มีคำต่อท้าย @2x หรือ @3x จาก Assets.xcassets โดยอัตโนมัติ นักพัฒนาไม่ควรโหลดรูปภาพ @1x บนอุปกรณ์ Retina — ซึ่งจะลดประสิทธิภาพและคุณภาพ

CGPoint และพิกัดเป็นจุด

โครงสร้าง CGPoint เป็นประเภทพื้นฐานสำหรับแสดงพิกัดใน iOS และ macOS ประกอบด้วยสองฟิลด์: x (CGFloat) และ y (CGFloat) ค่าจะถูกระบุเป็นจุด CGPoint ใช้ในเฟรมเวิร์กของ Apple ทั้งหมด: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position)

swift
// CGPoint — การทำงานกับพิกัดเป็นจุด
import UIKit

// การสร้างจุด
let point = CGPoint(x: 100.0, y: 200.0)
print("พิกัด: \(point.x), \(point.y)")

// การดำเนินการทางคณิตศาสตร์
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
    x: point.x + offset.x,
    y: point.y + offset.y
)

// ระยะห่างระหว่างจุด
func distance(from a: CGPoint, to b: CGPoint) -> CGFloat {
    let dx = b.x - a.x
    let dy = b.y - a.y
    return sqrt(dx * dx + dy * dy)
}

// การแปลงจุดเป็นพิกเซล
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

เมธอด toPixels ในตัวอย่างสาธิตการแปลงจุดเป็นพิกเซลจริงผ่าน UIScreen.main.scale ใน UIKit การแปลงนี้เกิดขึ้นโดยอัตโนมัติระหว่างการเรนเดอร์ แต่ใน Core Graphics และเมื่อทำงานกับ Metal นักพัฒนาอาจต้องการการแปลงเป็นพิกเซลอย่างชัดเจน การคำนวณแอนิเมชันทั้งหมด, การตรวจจับการชน และเค้าโครงจะดำเนินการเป็นจุด

UIFont.pointSize และการพิมพ์

คุณสมบัติ UIFont.pointSize ส่งคืนขนาดฟอนต์เป็นจุด — นี่คือหน่วยการพิมพ์มาตรฐานใน iOS ซึ่งสืบทอดมาจากการพิมพ์ (1 pt = 1/72 นิ้ว) Apple ใช้ pt สำหรับฟอนต์ตั้งแต่เวอร์ชันแรกๆ ของ Mac OS ใน iOS ขนาดฟอนต์ถูกระบุเป็นจุดผ่าน UIFont.systemFont(ofSize:) หรือผ่าน SwiftUI Font.system(size:)

swift
// การทำงานกับ UIFont.pointSize ใน Swift
import UIKit

// การสร้างฟอนต์ด้วยขนาดเป็น pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)

// การอ่าน pointSize
print("ขนาดหัวเรื่อง: \(titleFont.pointSize) pt")

// Dynamic Type — การปรับขนาดอัตโนมัติ
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("ปรับขนาดแล้ว: \(scaledFont.pointSize) pt")

// การเปรียบเทียบขนาดฟอนต์
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
    UIFont.systemFont(ofSize: size, weight: weight)
}

UIFontMetrics เป็นกลไกการปรับขนาดฟอนต์แบบไดนามิกที่เพิ่มใน iOS 11 โดยจะปรับ pointSize โดยอัตโนมัติตามการตั้งค่าการช่วยเหลือผู้ใช้ (Settings > Display & Brightness > Text Size) หากไม่ใช้ UIFontMetrics ฟอนต์จะไม่ถูกปรับขนาด ซึ่งละเมิดข้อกำหนดการช่วยเหลือ WCAG

pt vs px: ความแตกต่าง

ความแตกต่างระหว่าง pt และ px มีความสำคัญต่อการเข้าใจการพัฒนา iOS pt เป็นหน่วยเชิงตรรกะ, px เป็นหน่วยจริง หนึ่งจุดสามารถเทียบเท่ากับ 1, 2 หรือ 3 พิกเซลขึ้นอยู่กับ scale factor นักพัฒนาทำงานกับจุด, ระบบแปลงเป็นพิกเซลในขั้นตอน rasterization

ลักษณะptpx
ประเภทหน่วยเชิงตรรกะ (ไม่ขึ้นกับอุปกรณ์)จริง (พิกเซลฮาร์ดแวร์)
ขึ้นกับความละเอียดไม่ใช่
ใช้ที่ไหนUIKit, SwiftUI, Core Graphics, เค้าโครงรูปภาพ, Metal, raw buffer
การแปลง1 pt = scale × px (สเกล 1 ถึง 3)1 px = pt / scale
ตัวอย่าง (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

ข้อสรุปสำคัญ: ขนาดอินเทอร์เฟซเป็นจุดเหมือนกันบนอุปกรณ์ทุกรุ่นในคลาสเดียวกัน หน้าจอกว้าง 375 pt — ใช้ได้กับทั้ง iPhone SE และ iPhone 14 (รุ่นพื้นฐาน) ความแตกต่างเพียงอย่างเดียวคือมีพิกเซลจริงกี่พิกเซลที่บรรจุใน 375 pt นั้น ซึ่งรับประกัน UI ที่เป็นหนึ่งเดียวโดยไม่ต้องปรับแต่งด้วยตนเองสำหรับแต่ละอุปกรณ์

pt ใน SwiftUI

ใน SwiftUI นักพัฒนาไม่ได้ทำงานกับจุดอย่างชัดเจน — ขนาดทั้งหมดถูกระบุผ่าน Dp (จุดที่ไม่ขึ้นกับอุปกรณ์, เทียบเท่า pt) SwiftUI ใช้ scale factor โดยอัตโนมัติระหว่างการเรนเดอร์ แต่ให้การเข้าถึงผ่านค่า environment displayScale

swift
// SwiftUI — การทำงานกับจุดและ scale factor
import SwiftUI

struct ContentView: View {
    @Environment(\.displayScale) private var displayScale

    var body: some View {
        VStack(spacing: 16) {
            Text("หัวเรื่อง")
                .font(.system(size: 28, weight: .bold))

            Text("ข้อความเนื้อหาตัวอย่าง")
                .font(.body)

            HStack {
                Text("Scale factor:")
                    .font(.caption)
                Text("\(displayScale, specifier: "%.1f")")
                    .font(.caption.weight(.bold))
            }
        }
        .padding(20)
        .frame(width: 300)
    }
}

SwiftUI ทำให้ pt เป็นนามธรรมในระดับเฟรมเวิร์ก .font(.body) ใช้ Dynamic Type โดยอัตโนมัติ — ขนาดฟอนต์ปรับตามการตั้งค่าผู้ใช้ SwiftUI ไม่อนุญาตให้ระบุขนาดฟอนต์เป็นพิกเซล — ผ่าน Font และระบบการพิมพ์เท่านั้น ซึ่งรับประกันการช่วยเหลือของอินเทอร์เฟซโดยไม่ต้องใช้ความพยายามเพิ่มเติมจากนักพัฒนา

คำถามที่พบบ่อย

pt และ px แตกต่างกันอย่างไร?

pt — จุดเชิงตรรกะของ iOS, ไม่ขึ้นกับความละเอียดหน้าจอ px — พิกเซลจริงของหน้าจอ หนึ่งจุดบน iPhone 15 Pro เท่ากับสามพิกเซล (@3x), บน iPad Pro — สอง (@2x) นักพัฒนาทำงานกับจุดเสมอ

จะหา scale factor ของอุปกรณ์ได้อย่างไร?

ใน UIKit: UIScreen.main.scale ใน SwiftUI: @Environment(\.displayScale) ค่าทั่วไป: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x) บน iPhone 15 Pro Max ค่าคือ 3.0

ควรใช้ขนาดฟอนต์เท่าใดสำหรับเนื้อหาหลัก?

Apple แนะนำ 17 pt สำหรับเนื้อหาหลัก (UIFontTextStyle.body) สำหรับหัวเรื่อง — 28–34 pt สำหรับคำบรรยาย — 12–13 pt สไตล์ Dynamic Type จะปรับขนาดโดยอัตโนมัติตามการตั้งค่าการช่วยเหลือผู้ใช้

Dynamic Type ใน iOS คืออะไร?

Dynamic Type — ระบบปรับขนาดฟอนต์อัตโนมัติของ iOS ที่เปิดตัวใน iOS 7 ช่วยให้ข้อความปรับตามการตั้งค่าขนาดฟอนต์ระบบ (Text Size) และพารามิเตอร์การช่วยเหลือ (Bold Text, Larger Text) ใช้งานผ่าน UIFontMetrics หรือสไตล์ SwiftUI Font

จำเป็นต้องสร้างแอสเซท @1x สำหรับ iOS หรือไม่?

ไม่ อุปกรณ์ Apple สมัยใหม่ใช้จอ Retina ที่ @2x หรือ @3x รูปภาพ @1x จำเป็นสำหรับความเข้ากันได้กับ iPad ที่ไม่มี Retina เท่านั้น (iPad 2, iPad mini เจเนอเรชันที่ 1) ตั้งแต่ iOS 13 เป็นต้นมา อุปกรณ์ทั้งหมดรองรับอย่างน้อย @2x

สรุป

  • pt — หน่วยเชิงตรรกะของ iOS ที่แยกอินเทอร์เฟซออกจากความละเอียดจริงและ scale factor
  • @2x และ @3x — ตัวคูณขนาดสำหรับจอ Retina ที่กำหนดจำนวนพิกเซลต่อจุด
  • CGPoint — โครงสร้างสำหรับพิกัดเป็นจุด, พื้นฐานของการดำเนินการระบุตำแหน่งทั้งหมดใน UIKit
  • UIFont.pointSize — ขนาดฟอนต์เป็นจุดพร้อมรองรับ Dynamic Type ผ่าน UIFontMetrics
  • SwiftUI ทำให้ pt เป็นนามธรรมอย่างสมบูรณ์, ใช้ Font และ Dynamic Type เพื่อการปรับตัวอัตโนมัติ
  • แอสเซท iOS ควรจัดเตรียมเป็น @2x และ @3x, @1x ไม่จำเป็นสำหรับอุปกรณ์สมัยใหม่
  • Dynamic Type — กลไกการช่วยเหลือที่จำเป็นซึ่งปรับขนาดฟอนต์โดยอัตโนมัติสำหรับผู้ใช้

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม