pt — points, iOS və macOS-da interfeysi fiziki ekran rezolyusiyasından abstraksiya edən məntiqi ölçü vahidi. Bir point Retinasız ekranda (@1x) bir pikselə, Retina (@2x, @3x) ekranlarda isə iki və ya üç pikselə uyğun gəlir. Məqalə pt-nin iş prinsipini, müxtəlif ekranlarda miqyaslamanı, CGPoint və UIFont.pointSize istifadəsini izah edir.
Əsas Məlumat
pt (point) — iOS-da proqramçıya interfeysi displeyin fiziki rezolyusiyasından asılı olmayan abstrakt koordinatlarda təsvir etməyə imkan verən məntiqi ölçü vahididir. Apple 2010-cu ildə iPhone 4 və Retina displeyin çıxması ilə point anlayışını təqdim etdi. Retinaya qədər proqramçılar birbaşa piksellərdən istifadə edirdilər — bir UI piksel bir fiziki pikselə bərabər idi.
iOS koordinat sistemi nöqtələr üzərində qurulub: (0,0) nöqtəsi ekranın yuxarı sol küncündədir, X oxu sağa, Y oxu isə aşağıya yönəlmişdir. Nöqtələrdə ekran ölçüsü hər cihaz sinfi üçün sabit qalır: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (portret), 1024×768 pt (landşaft). Fiziki rezolyusiya isə 1179×2556 px (iPhone 15 Pro) ola bilər — lakin proqramçı nöqtələrlə işləyir.
Apple Human Interface Guidelines-ə görə, nöqtələr UIKit-in fundamental abstraksiyasıdır. Bütün freymvorklar — UIKit, SwiftUI, Core Graphics, SpriteKit — nöqtələrlə işləyir. Piksellərə konvertasiya UIScreen.nativeScale vasitəsilə render mərhələsində avtomatik baş verir.
Miqyas əmsalı (scale factor) bir məntiqi nöqtəyə neçə fiziki pikselin uyğun gəldiyini müəyyən edir. Apple üç səviyyədən istifadə edir: @1x — 1 pt = 1 px (Retinasız iPad mini, köhnə modellər), @2x — 1 pt = 2 px (2020-ci ilə qədər iPhone-ların çoxu, iPad Retina), @3x — 1 pt = 3 px (iPhone X və daha yeniləri, o cümlədən iPhone 15 Pro).
| Cihaz | pt ilə ölçü | px ilə ölçü | Skala |
|---|---|---|---|
| iPhone SE (3rd gen) | 375 × 667 | 750 × 1334 | @2x |
| iPhone 14 | 390 × 844 | 1170 × 2532 | @3x |
| iPhone 15 Pro Max | 430 × 932 | 1290 × 2796 | @3x |
| iPad Pro 12.9" | 1024 × 1366 | 2048 × 2732 | @2x |
| iPad mini (6th gen) | 744 × 1133 | 1488 × 2266 | @2x |
Scale factor dəyəri UIScreen.main.scale (UIKit üçün) və @Environment(\.displayScale) (SwiftUI üçün) vasitəsilə əldə edilir. Aktivlərin yüklənməsi zamanı istifadə olunur: sistem Assets.xcassets-dən @2x və ya @3x şəkilçisi olan şəkli avtomatik seçir. Proqramçı Retina cihazlarında @1x şəkillərini yükləməməlidir — bu performansı və keyfiyyəti aşağı salır.
CGPoint strukturu — iOS və macOS-da koordinatları təmsil etmək üçün əsas tipdir. İki sahəsi var: x (CGFloat) və y (CGFloat), qiymətlər nöqtələrlə verilir. CGPoint bütün Apple freymvorklarında istifadə olunur: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).
// CGPoint — nöqtələrdə koordinatlarla iş
import UIKit
// Nöqtənin yaradılması
let point = CGPoint(x: 100.0, y: 200.0)
print("Koordinatlar: \(point.x), \(point.y)")
// Riyazi əməliyyatlar
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
x: point.x + offset.x,
y: point.y + offset.y
)
// Nöqtələr arası məsafə
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)
}
// Nöqtənin piksellərə çevrilməsi
extension CGPoint {
func toPixels(scale: CGFloat) -> CGPoint {
CGPoint(x: x * scale, y: y * scale)
}
}Nümunədəki toPixels metodu nöqtələrin UIScreen.main.scale vasitəsilə fiziki piksellərə konvertasiyasını göstərir. UIKit-də bu konvertasiya render zamanı avtomatik baş verir, lakin Core Graphics və Metal ilə işləyərkən proqramçıya piksellərə açıq şəkildə çevirmə lazım ola bilər. Bütün animasiya hesablamaları, toqquşma aşkarlama və layout nöqtələrlə yerinə yetirilir.
UIFont.pointSize xüsusiyyəti şrift ölçüsünü nöqtələrlə qaytarır — bu iOS-da tipoqrafikanın standart vahididir, poliqrafiyadan miras qalmışdır (1 pt = 1/72 düym). Apple Mac OS-in ilk versiyalarından şriftlər üçün pt-dən istifadə edir. iOS-da şrift ölçüsü UIFont.systemFont(ofSize:) və ya SwiftUI Font.system(size:) vasitəsilə nöqtələrlə təyin edilir.
// Swift-də UIFont.pointSize ilə iş
import UIKit
// pt ilə şriftin yaradılması
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)
// pointSize-in oxunması
print("Başlıq ölçüsü: \(titleFont.pointSize) pt")
// Dinamik tip — avtomatik miqyaslama
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Miqyaslanmış: \(scaledFont.pointSize) pt")
// Şrift ölçülərinin müqayisəsi
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
UIFont.systemFont(ofSize: size, weight: weight)
}UIFontMetrics — iOS 11-də əlavə edilmiş dinamik şrift miqyaslama mexanizmidir. İstifadəçinin əlçatanlıq parametrlərindən (Settings > Display & Brightness > Text Size) asılı olaraq pointSize-i avtomatik korrektə edir. UIFontMetrics istifadə edilmədən şriftlər miqyaslanmır, bu da WCAG əlçatanlıq tələblərini pozur.
pt və px arasındakı fərq iOS inkişafını anlamaq üçün kritikdir. pt — məntiqi vahid, px — fiziki vahid. Bir nöqtə scale factor-dan asılı olaraq 1, 2 və ya 3 pikselə uyğun ola bilər. Proqramçı nöqtələrlə işləyir, sistem rasterizasiya mərhələsində onları piksellərə çevirir.
| Xüsusiyyət | pt | px |
|---|---|---|
| Vahid növü | Məntiqi (device-independent) | Fiziki (hardware pixel) |
| Rezolyusiyadan asılılıq | Xeyr | Bəli |
| Harada istifadə olunur | UIKit, SwiftUI, Core Graphics, layout | Şəkillər, Metal, raw buffer |
| Konvertasiya | 1 pt = scale × px (scale 1-dən 3-ə) | 1 px = pt / scale |
| Nümunə (iPhone 15 Pro) | 393 × 852 pt | 1179 × 2556 px |
Əsas nəticə: eyni sinif bütün cihazlarda interfeysin nöqtələrdə ölçüsü eynidir. 375 pt genişliyində ekran — həm iPhone SE, həm də iPhone 14 (baza modeli) üçün belədir. Fərq yalnız bu 375 pt-ə neçə fiziki pikselin sığmasındadır. Bu, hər cihaz üçün əl ilə adaptasiya olmadan vahid UI təmin edir.
SwiftUI-də proqramçı açıq şəkildə nöqtələrlə işləmir — bütün ölçülər Dp (device-independent points, pt-nin ekvivalenti) vasitəsilə verilir. SwiftUI render zamanı avtomatik scale factor tətbiq edir, lakin ona environment value displayScale vasitəsilə giriş imkanı verir.
// SwiftUI — nöqtələr və scale factor ilə iş
import SwiftUI
struct ContentView: View {
@Environment(\.displayScale) private var displayScale
var body: some View {
VStack(spacing: 16) {
Text("Başlıq")
.font(.system(size: 28, weight: .bold))
Text("Nümunənin əsas mətni")
.font(.body)
HStack {
Text("Scale factor:")
.font(.caption)
Text("\(displayScale, specifier: "%.1f")")
.font(.caption.weight(.bold))
}
}
.padding(20)
.frame(width: 300)
}
}SwiftUI pt-ni freymvork səviyyəsində abstraksiya edir. .font(.body) avtomatik Dynamic Type istifadə edir — şrift ölçüsü istifadəçinin parametrlərinə uyğunlaşır. SwiftUI şrift ölçüsünü piksellərdə təyin etməyə imkan vermir — yalnız Font və tipoqrafika sistemi vasitəsilə. Bu, proqramçının əlavə səyi olmadan interfeysin əlçatanlığını təmin edir.
Tez-tez verilən suallar
pt — iOS məntiqi nöqtəsi, ekran rezolyusiyasından asılı deyil. px — displeyin fiziki pikseli. iPhone 15 Pro-da bir nöqtə üç pikselə (@3x), iPad Pro-da isə iki pikselə (@2x) bərabərdir. Proqramçı həmişə nöqtələrlə işləyir.
UIKit-də: UIScreen.main.scale. SwiftUI-də: @Environment(\.displayScale). Tipik dəyərlər: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). iPhone 15 Pro Max-də dəyər 3.0-dır.
Apple əsas mətn üçün 17 pt tövsiyə edir (UIFontTextStyle.body). Başlıqlar üçün — 28–34 pt. İmzalar üçün — 12–13 pt. Dynamic Type stilləri istifadəçinin əlçatanlıq parametrlərinə avtomatik uyğunlaşır.
Dynamic Type — iOS 7-də təqdim edilmiş avtomatik şrift miqyaslama sistemidir. Mətnin sistem şrift ölçüsü (Text Size) və əlçatanlıq parametrlərinə (Bold Text, Larger Text) uyğunlaşmasına imkan verir. UIFontMetrics və ya SwiftUI Font stilləri vasitəsilə həyata keçirilir.
Xeyr. Müasir Apple cihazları @2x və ya @3x Retina displeylərdən istifadə edir. @1x şəkillər yalnız Retinasız iPad (iPad 2, iPad mini 1st gen) ilə uyğunluq üçün lazımdır. iOS 13-dən etibarən bütün cihazlar ən azı @2x dəstəkləyir.
Nəticələr
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun