pt — vad det är, Points och skalning i iOS

Författare: IT Sectr Publicerad: 2026-02-25 Lästid: 8 min

pt — punkter, logisk måttenhet i iOS och macOS som abstraherar gränssnittet från den fysiska skärmupplösningen. En point motsvarar en pixel på en skärm utan Retina (@1x) och två eller tre pixlar på Retina (@2x, @3x). Artikeln förklarar hur pt fungerar, skalning på olika skärmar, användning av CGPoint och UIFont.pointSize.

Huvudsakligt

  • pt — logisk iOS-punkt, oberoende av fysisk skärmupplösning
  • @1x, @2x, @3x — skalfaktor som bestämmer hur många pixlar per punkt
  • CGPoint — struktur för koordinater i pt, grunden för alla positioneringsoperationer
  • UIFont.pointSize — teckenstorlek i punkter, returneras alltid i pt
  • Avstånd från skärmen: iPhone 15 Pro — 1 pt = 3 px vid pixeldensitet 460 PPI

Vad är pt i iOS?

pt (point) — logisk måttenhet i iOS som låter utvecklaren beskriva gränssnittet i abstrakta koordinater, oberoende av skärmens fysiska upplösning. Apple introducerade begreppet point med lanseringen av iPhone 4 och Retina-skärmen 2010. Före Retina använde utvecklare pixlar direkt — en UI-pixel var lika med en fysisk pixel.

iOS koordinatsystem är byggt på punkter: punkten (0,0) finns i skärmens övre vänstra hörn, X-axeln pekar åt höger, Y-axeln nedåt. Skärmstorleken i punkter förblir konstant för varje enhetsklass: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (stående), 1024×768 pt (liggande). Den fysiska upplösningen kan vara 1179×2556 px (iPhone 15 Pro) — men utvecklaren arbetar med punkter.

Enligt Apple Human Interface Guidelines är punkter den grundläggande abstraktionen i UIKit. Alla ramverk — UIKit, SwiftUI, Core Graphics, SpriteKit — arbetar med punkter. Konvertering till pixlar sker automatiskt i renderingsfasen via UIScreen.nativeScale.

Skalfaktorer: @1x, @2x, @3x

Skalfaktorn (scale factor) bestämmer hur många fysiska pixlar som motsvarar en logisk punkt. Apple använder tre nivåer: @1x — 1 pt = 1 px (iPad mini utan Retina, äldre modeller), @2x — 1 pt = 2 px (de flesta iPhone fram till 2020, iPad Retina), @3x — 1 pt = 3 px (iPhone X och nyare, inklusive iPhone 15 Pro).

EnhetStorlek i ptStorlek i pxSkala
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

Värdet för scale factor är tillgängligt via UIScreen.main.scale (för UIKit) och @Environment(\.displayScale) (för SwiftUI). Används vid inläsning av tillgångar: systemet väljer automatiskt bilden med suffixet @2x eller @3x från Assets.xcassets. Utvecklaren laddar inte @1x-bilder på Retina-enheter — detta minskar prestanda och kvalitet.

CGPoint och koordinater i punkter

Strukturen CGPoint — grundtypen för representation av koordinater i iOS och macOS. Innehåller två fält: x (CGFloat) och y (CGFloat), värden anges i punkter. CGPoint används i alla Apple-ramverk: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).

swift
// CGPoint — arbete med koordinater i punkter
import UIKit

// Skapa punkt
let point = CGPoint(x: 100.0, y: 200.0)
print("Koordinater: \(point.x), \(point.y)")

// Matematiska operationer
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
    x: point.x + offset.x,
    y: point.y + offset.y
)

// Avstånd mellan punkter
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)
}

// Konvertera punkt till pixlar
extension CGPoint {
    func toPixels(scale: CGFloat) -> CGPoint {
        CGPoint(x: x * scale, y: y * scale)
    }
}

Metoden toPixels i exemplet visar konvertering av punkter till fysiska pixlar via UIScreen.main.scale. I UIKit sker denna konvertering automatiskt vid rendering, men i Core Graphics och vid arbete med Metal kan utvecklaren behöva explicit konvertering till pixlar. Alla animeringsberäkningar, kollisionsdetektering och layout utförs i punkter.

UIFont.pointSize och typografi

Egenskapen UIFont.pointSize returnerar teckenstorleken i punkter — detta är standard typografienhet i iOS, ärvd från tryckkonsten (1 pt = 1/72 tum). Apple använder pt för teckensnitt sedan de första versionerna av Mac OS. I iOS ställs teckenstorleken in i punkter via UIFont.systemFont(ofSize:) eller via SwiftUI Font.system(size:).

swift
// Arbete med UIFont.pointSize i Swift
import UIKit

// Skapa teckensnitt med storlek i pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)

// Läsa pointSize
print("Rubrikstorlek: \(titleFont.pointSize) pt")

// Dynamisk typ — automatisk skalning
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Skalad: \(scaledFont.pointSize) pt")

// Jämföra teckenstorlekar
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
    UIFont.systemFont(ofSize: size, weight: weight)
}

UIFontMetrics — mekanismen för dynamisk skalning av teckensnitt, tillagd i iOS 11. Justerar automatiskt pointSize baserat på användarens tillgänglighetsinställningar (Settings > Display & Brightness > Text Size). Utan UIFontMetrics skalas inte teckensnitten, vilket bryter mot WCAG:s tillgänglighetskrav.

pt vs px: skillnader

Skillnaden mellan pt och px är avgörande för att förstå iOS-utveckling. pt — logisk enhet, px — fysisk enhet. En punkt kan motsvara 1, 2 eller 3 pixlar beroende på scale factor. Utvecklaren arbetar med punkter, systemet omvandlar dem till pixlar i rasteriseringsfasen.

Egenskapptpx
Typ av enhetLogisk (enhetsoberoende)Fysisk (hårdvarupixel)
Beror på upplösningNejJa
Var användsUIKit, SwiftUI, Core Graphics, layoutBilder, Metal, raw buffer
Konvertering1 pt = scale × px (scale från 1 till 3)1 px = pt / scale
Exempel (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

Den viktigaste slutsatsen: gränssnittsstorleken i punkter är densamma på alla enheter av samma klass. En skärm som är 375 pt bred — det är både iPhone SE och iPhone 14 (basmodell). Skillnaden är bara hur många fysiska pixlar som får plats i dessa 375 pt. Detta säkerställer ett enhetligt UI utan manuell anpassning för varje enhet.

pt i SwiftUI

I SwiftUI arbetar utvecklaren inte explicit med punkter — alla storlekar anges via Dp (device-independent points, motsvarighet till pt). SwiftUI tillämpar automatiskt scale factor vid rendering, men ger åtkomst via environment value displayScale.

swift
// SwiftUI — arbete med punkter och scale factor
import SwiftUI

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

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

            Text("Exemplets huvudtext")
                .font(.body)

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

SwiftUI abstraherar pt på ramverksnivå. .font(.body) använder automatiskt Dynamic Type — teckenstorleken anpassas till användarens inställningar. SwiftUI tillåter inte att teckenstorlek ställs in i pixlar — endast via Font och typografisystemet. Detta garanterar gränssnittets tillgänglighet utan extra ansträngning från utvecklaren.

Vanliga frågor

Vad är skillnaden mellan pt och px?

pt — logisk iOS-punkt, oberoende av skärmupplösning. px — fysisk pixel på skärmen. En punkt på iPhone 15 Pro är lika med tre pixlar (@3x), på iPad Pro — två (@2x). Utvecklaren arbetar alltid med punkter.

Hur får jag reda på enhetens scale factor?

I UIKit: UIScreen.main.scale. I SwiftUI: @Environment(\.displayScale). Typiska värden: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). På iPhone 15 Pro Max är värdet 3.0.

Vilken teckenstorlek ska jag använda för body text?

Apple rekommenderar 17 pt för huvudtext (UIFontTextStyle.body). För rubriker — 28–34 pt. För bildtexter — 12–13 pt. Dynamic Type-stilar skalas automatiskt efter användarens tillgänglighetsinställningar.

Vad är Dynamic Type i iOS?

Dynamic Type — systemet för automatisk teckensnittsskalning i iOS, introducerat i iOS 7. Låter texten anpassas till systemets teckenstorleksinställningar (Text Size) och tillgänglighetsparametrar (Bold Text, Larger Text). Implementeras via UIFontMetrics eller SwiftUI Font-stilar.

Behöver jag skapa @1x-tillgångar för iOS?

Nej. Moderna Apple-enheter använder Retina-skärmar med @2x eller @3x. @1x-bilder behövs bara för kompatibilitet med iPad utan Retina (iPad 2, iPad mini 1st gen). Från och med iOS 13 stöder alla enheter minst @2x.

Sammanfattning

  • pt — logisk iOS-enhet som abstraherar gränssnittet från fysisk upplösning och scale factor
  • @2x och @3x — skalfaktorer för Retina-skärmar som bestämmer antalet pixlar per punkt
  • CGPoint — struktur för koordinater i punkter, grunden för alla positioneringsoperationer i UIKit
  • UIFont.pointSize — teckenstorlek i punkter med Dynamic Type-stöd via UIFontMetrics
  • SwiftUI abstraherar pt helt, med Font och Dynamic Type för automatisk anpassning
  • Tillgångar för iOS bör levereras i @2x och @3x, @1x krävs inte för moderna enheter
  • Dynamic Type — obligatorisk tillgänglighetsmekanism som automatiskt skalar teckensnitt för användaren

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också