pt — τι είναι, Points και κλιμάκωση στο iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-25 Χρόνος ανάγνωσης: 8 λεπ

pt — σημεία, λογική μονάδα μέτρησης σε iOS και macOS, η οποία αφαιρεί τη διεπαφή από τη φυσική ανάλυση της οθόνης. Ένα point αντιστοιχεί σε ένα pixel σε οθόνη χωρίς Retina (@1x) και σε δύο ή τρία pixel σε Retina (@2x, @3x). Το άρθρο εξηγεί την αρχή λειτουργίας του pt, την κλιμάκωση σε διαφορετικές οθόνες, τη χρήση CGPoint και UIFont.pointSize.

Κύρια

  • pt — λογικό σημείο iOS, ανεξάρτητο από τη φυσική ανάλυση οθόνης
  • @1x, @2x, @3x — συντελεστής κλίμακας που καθορίζει πόσα pixel αναλογούν σε ένα σημείο
  • CGPoint — δομή για συντεταγμένες σε pt, βάση όλων των λειτουργιών τοποθέτησης
  • UIFont.pointSize — μέγεθος γραμματοσειράς σε σημεία, επιστρέφεται πάντα σε pt
  • Απόσταση από την οθόνη: iPhone 15 Pro — 1 pt = 3 px σε πυκνότητα pixel 460 PPI

Τι είναι το pt στο iOS;

pt (point) — λογική μονάδα μέτρησης στο iOS που επιτρέπει στον προγραμματιστή να περιγράφει τη διεπαφή σε αφηρημένες συντεταγμένες, ανεξάρτητες από τη φυσική ανάλυση της οθόνης. Η Apple εισήγαγε την έννοια του point με την κυκλοφορία του iPhone 4 και της οθόνης Retina το 2010. Πριν από το Retina, οι προγραμματιστές χρησιμοποιούσαν απευθείας pixel — ένα UI pixel ήταν ίσο με ένα φυσικό pixel.

Το σύστημα συντεταγμένων του 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 — λειτουργούν με σημεία. Η μετατροπή σε pixel γίνεται αυτόματα στο στάδιο της απόδοσης μέσω UIScreen.nativeScale.

Συντελεστές κλίμακας: @1x, @2x, @3x

Ο συντελεστής κλίμακας (scale factor) καθορίζει πόσα φυσικά pixel αντιστοιχούν σε ένα λογικό σημείο. Η 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 (3rd gen)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 (6th gen)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)
}

// Μετατροπή σημείου σε pixel
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

Η μέθοδος toPixels στο παράδειγμα παρουσιάζει τη μετατροπή σημείων σε φυσικά pixel μέσω του UIScreen.main.scale. Στο UIKit αυτή η μετατροπή γίνεται αυτόματα κατά την απόδοση, αλλά στο Core Graphics και κατά την εργασία με Metal, ο προγραμματιστής μπορεί να χρειαστεί ρητή μετατροπή σε pixel. Όλοι οι υπολογισμοί κινούμενων σχεδίων, ανίχνευσης συγκρούσεων και διάταξης εκτελούνται σε σημεία.

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

// Δυναμικός τύπος — αυτόματη κλίμακα
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 pixel ανάλογα με το scale factor. Ο προγραμματιστής λειτουργεί με σημεία, το σύστημα τα μετατρέπει σε pixel στο στάδιο της ραστεροποίησης.

Χαρακτηριστικόptpx
Τύπος μονάδαςΛογική (ανεξάρτητη συσκευής)Φυσική (hardware pixel)
Εξαρτάται από ανάλυσηΌχιΝαι
Πού χρησιμοποιείταιUIKit, SwiftUI, Core Graphics, layoutΕικόνες, Metal, raw buffer
Μετατροπή1 pt = scale × px (scale από 1 έως 3)1 px = pt / scale
Παράδειγμα (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

Το βασικό συμπέρασμα: το μέγεθος της διεπαφής σε σημεία είναι το ίδιο σε όλες τις συσκευές της ίδιας κατηγορίας. Οθόνη πλάτους 375 pt — είναι και το iPhone SE και το iPhone 14 (βασικό μοντέλο). Η διαφορά είναι μόνο στο πόσα φυσικά pixel χωρούν σε αυτά τα 375 pt. Αυτό εξασφαλίζει ομοιόμορφη διεπαφή χωρίς χειροκίνητη προσαρμογή για κάθε συσκευή.

pt στο SwiftUI

Στο SwiftUI ο προγραμματιστής δεν λειτουργεί ρητά με σημεία — όλα τα μεγέθη δίνονται μέσω Dp (device-independent points, ισοδύναμο του pt). Το SwiftUI εφαρμόζει αυτόματα το scale factor κατά την απόδοση, αλλά παρέχει πρόσβαση σε αυτό μέσω του environment value 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 δεν επιτρέπει τον ορισμό μεγέθους γραμματοσειράς σε pixel — μόνο μέσω Font και του συστήματος τυπογραφίας. Αυτό εγγυάται την προσβασιμότητα της διεπαφής χωρίς πρόσθετη προσπάθεια από τον προγραμματιστή.

Συχνές Ερωτήσεις

Ποια είναι η διαφορά μεταξύ pt και px;

pt — λογικό σημείο iOS, ανεξάρτητο από την ανάλυση οθόνης. px — φυσικό pixel της οθόνης. Ένα σημείο στο iPhone 15 Pro ισούται με τρία pixel (@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.

Τι μέγεθος γραμματοσειράς να χρησιμοποιήσω για body text;

Η 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 1st gen). Από το iOS 13, όλες οι συσκευές υποστηρίζουν τουλάχιστον @2x.

Σύνοψη

  • pt — λογική μονάδα iOS που αφαιρεί τη διεπαφή από τη φυσική ανάλυση και το scale factor
  • @2x και @3x — συντελεστές κλίμακας για οθόνες Retina, καθορίζουν τον αριθμό pixel ανά σημείο
  • CGPoint — δομή για συντεταγμένες σε σημεία, βάση όλων των λειτουργιών τοποθέτησης στο UIKit
  • UIFont.pointSize — μέγεθος γραμματοσειράς σε σημεία με υποστήριξη Dynamic Type μέσω UIFontMetrics
  • SwiftUI αφαιρεί πλήρως το pt, χρησιμοποιώντας Font και Dynamic Type για αυτόματη προσαρμογή
  • Πόροι για iOS πρέπει να παρέχονται σε @2x και @3x, το @1x δεν απαιτείται για σύγχρονες συσκευές
  • Dynamic Type — υποχρεωτικός μηχανισμός προσβασιμότητας που κλιμακώνει αυτόματα γραμματοσειρές

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης