pt — ce este, puncte și scalare în iOS

Autor: IT Sectr Publicat: 2026-02-25 Timp de citire: 8 min

pt — puncte, unitatea logică de măsură în iOS și macOS, care abstractizează interfața de rezoluția fizică a ecranului. Un point corespunde unui pixel pe ecranul fără Retina (@1x) și la doi sau trei pixeli pe Retina (@2x, @3x). Articolul explică principiul de funcționare a pt, scalarea pe diferite ecrane, utilizarea CGPoint și UIFont.pointSize.

Principalul

  • pt — punct logic iOS, independent de rezoluția fizică a ecranului
  • @1x, @2x, @3x — coeficientul de scară care determină câți pixeli revin la un punct
  • CGPoint — structură pentru coordonate în pt, baza tuturor operațiilor de poziționare
  • UIFont.pointSize — dimensiunea fontului în puncte, întotdeauna returnată în pt
  • Distanța de la ecran: iPhone 15 Pro — 1 pt = 3 px la densitatea de pixeli de 460 PPI

Ce este pt în iOS?

pt (point) — unitatea logică de măsură în iOS care permite dezvoltatorului să descrie interfața în coordonate abstracte, independente de rezoluția fizică a ecranului. Apple a introdus conceptul de point odată cu lansarea iPhone 4 și a ecranului Retina în 2010. Înainte de Retina, dezvoltatorii foloseau pixelii direct — un pixel UI egal cu un pixel fizic.

Sistemul de coordonate iOS este construit pe puncte: punctul (0,0) se află în colțul din stânga sus al ecranului, axa X este orientată spre dreapta, axa Y — în jos. Dimensiunea ecranului în puncte rămâne constantă pentru fiecare clasă de dispozitive: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (portret), 1024×768 pt (peisaj). Rezoluția fizică poate fi 1179×2556 px (iPhone 15 Pro) — dar dezvoltatorul lucrează cu puncte.

Conform Apple Human Interface Guidelines, punctele sunt abstracția fundamentală a UIKit. Toate frameworkurile — UIKit, SwiftUI, Core Graphics, SpriteKit — operează cu puncte. Conversia în pixeli are loc automat în etapa de randare prin UIScreen.nativeScale.

Coeficienții de scară: @1x, @2x, @3x

Coeficientul de scară (scale factor) determină câți pixeli fizici corespund unui punct logic. Apple folosește trei nivele: @1x — 1 pt = 1 px (iPad mini fără Retina, modele vechi), @2x — 1 pt = 2 px (majoritatea iPhone-urilor până în 2020, iPad Retina), @3x — 1 pt = 3 px (iPhone X și mai noi, inclusiv iPhone 15 Pro).

DispozitivDimensiune în ptDimensiune în pxScară
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

Valoarea scale factor este disponibilă prin UIScreen.main.scale (pentru UIKit) și @Environment(\.displayScale) (pentru SwiftUI). Se utilizează la încărcarea resurselor: sistemul selectează automat imaginea cu sufixul @2x sau @3x din Assets.xcassets. Dezvoltatorul nu încarcă imagini @1x pe dispozitivele cu Retina — aceasta reduce performanța și calitatea.

CGPoint și coordonate în puncte

Structura CGPoint — tipul de bază pentru reprezentarea coordonatelor în iOS și macOS. Conține două câmpuri: x (CGFloat) și y (CGFloat), valorile sunt date în puncte. CGPoint este utilizat în toate frameworkurile Apple: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).

swift
// CGPoint — lucrul cu coordonate în puncte
import UIKit

// Crearea punctului
let point = CGPoint(x: 100.0, y: 200.0)
print("Coordonate: \(point.x), \(point.y)")

// Operații matematice
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
    x: point.x + offset.x,
    y: point.y + offset.y
)

// Distanța dintre puncte
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)
}

// Conversia punctului în pixeli
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

Metoda toPixels din exemplu demonstrează conversia punctelor în pixeli fizici prin UIScreen.main.scale. În UIKit această conversie are loc automat la randare, dar în Core Graphics și la lucrul cu Metal, dezvoltatorul poate avea nevoie de o conversie explicită în pixeli. Toate calculele de animații, detectarea coliziunilor și layout-ul se execută în puncte.

UIFont.pointSize și tipografie

Proprietatea UIFont.pointSize returnează dimensiunea fontului în puncte — aceasta este unitatea standard de tipografie în iOS, moștenită din poligrafie (1 pt = 1/72 de țol). Apple folosește pt pentru fonturi de la primele versiuni Mac OS. În iOS dimensiunea fontului se setează în puncte prin UIFont.systemFont(ofSize:) sau prin SwiftUI Font.system(size:).

swift
// Lucrul cu UIFont.pointSize în Swift
import UIKit

// Crearea fontului cu dimensiunea în pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)

// Citirea pointSize
print("Dimensiunea titlului: \(titleFont.pointSize) pt")

// Tip dinamic — scalare automată
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Scalat: \(scaledFont.pointSize) pt")

// Compararea dimensiunilor fonturilor
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
    UIFont.systemFont(ofSize: size, weight: weight)
}

UIFontMetrics — mecanismul de scalare dinamică a fonturilor, adăugat în iOS 11. Corectează automat pointSize în funcție de setările de accesibilitate ale utilizatorului (Settings > Display & Brightness > Text Size). Fără utilizarea UIFontMetrics, fonturile nu se scalează, ceea ce încalcă cerințele WCAG privind accesibilitatea.

pt vs px: diferențe

Diferența dintre pt și px este critică pentru înțelegerea dezvoltării iOS. pt — unitate logică, px — unitate fizică. Un punct poate corespunde la 1, 2 sau 3 pixeli în funcție de scale factor. Dezvoltatorul operează cu puncte, sistemul le transformă în pixeli în etapa de rasterizare.

Caracteristicăptpx
Tip unitateLogică (independentă de dispozitiv)Fizică (pixel hardware)
Depinde de rezoluțieNuDa
Unde se utilizeazăUIKit, SwiftUI, Core Graphics, layoutImagini, Metal, raw buffer
Conversie1 pt = scale × px (scale de la 1 la 3)1 px = pt / scale
Exemplu (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

Consecința cheie: dimensiunea interfeței în puncte este aceeași pe toate dispozitivele din aceeași clasă. Ecranul de 375 pt lățime — este atât iPhone SE, cât și iPhone 14 (modelul de bază). Diferența constă doar în câți pixeli fizici încap în acești 375 pt. Aceasta asigură o interfață uniformă fără adaptare manuală pentru fiecare dispozitiv.

pt în SwiftUI

În SwiftUI dezvoltatorul nu operează explicit cu puncte — toate dimensiunile sunt date prin Dp (device-independent points, echivalentul pt). SwiftUI aplică automat scale factor la randare, dar oferă acces la acesta prin environment value displayScale.

swift
// SwiftUI — lucrul cu puncte și scale factor
import SwiftUI

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

    var body: some View {
        VStack(spacing: 16) {
            Text("Titlu")
                .font(.system(size: 28, weight: .bold))

            Text("Textul principal al exemplului")
                .font(.body)

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

SwiftUI abstractizează pt la nivel de framework. .font(.body) folosește automat Dynamic Type — dimensiunea fontului se adaptează la setările utilizatorului. SwiftUI nu permite setarea dimensiunii fontului în pixeli — doar prin Font și sistemul de tipografie. Aceasta garantează accesibilitatea interfeței fără efort suplimentar din partea dezvoltatorului.

Întrebări frecvente

Care este diferența dintre pt și px?

pt — punct logic iOS, independent de rezoluția ecranului. px — pixel fizic al ecranului. Un punct pe iPhone 15 Pro este egal cu trei pixeli (@3x), pe iPad Pro — cu doi (@2x). Dezvoltatorul operează întotdeauna cu puncte.

Cum aflu scale factor-ul dispozitivului?

În UIKit: UIScreen.main.scale. În SwiftUI: @Environment(\.displayScale). Valori tipice: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). Pe iPhone 15 Pro Max valoarea este 3.0.

Ce dimensiune de font să folosesc pentru body text?

Apple recomandă 17 pt pentru textul principal (UIFontTextStyle.body). Pentru titluri — 28–34 pt. Pentru subtitrări — 12–13 pt. Stilurile Dynamic Type se scalează automat la setările de accesibilitate ale utilizatorului.

Ce este Dynamic Type în iOS?

Dynamic Type — sistemul de scalare automată a fonturilor în iOS, introdus în iOS 7. Permite textului să se adapteze la setările sistemului de dimensiune a fontului (Text Size) și parametrii de accesibilitate (Bold Text, Larger Text). Se implementează prin UIFontMetrics sau stilurile SwiftUI Font.

Trebuie create resurse @1x pentru iOS?

Nu. Dispozitivele moderne Apple folosesc ecrane Retina cu @2x sau @3x. Imaginile @1x sunt necesare doar pentru compatibilitatea cu iPad fără Retina (iPad 2, iPad mini 1st gen). Începând cu iOS 13, toate dispozitivele suportă cel puțin @2x.

Concluzii

  • pt — unitatea logică iOS care abstractizează interfața de rezoluția fizică și scale factor
  • @2x și @3x — coeficienții de scară pentru ecranele Retina, determinând numărul de pixeli pe punct
  • CGPoint — structura pentru coordonate în puncte, baza tuturor operațiilor de poziționare în UIKit
  • UIFont.pointSize — dimensiunea fontului în puncte cu suport Dynamic Type prin UIFontMetrics
  • SwiftUI abstractizează complet pt, folosind Font și Dynamic Type pentru adaptare automată
  • Resursele pentru iOS trebuie furnizate în @2x și @3x, @1x nu este necesar pentru dispozitivele moderne
  • Dynamic Type — mecanism obligatoriu de accesibilitate, care scalează automat fonturile pentru utilizator

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și