pt — points, iOS ve macOS'ta arayüzü fiziksel ekran çözünürlüğünden soyutlayan mantıksal bir ölçü birimidir. Bir point, Retina olmayan bir ekranda (@1x) bir piksele, Retina'da (@2x, @3x) ise iki veya üç piksele karşılık gelir. Bu makale, pt'nin çalışma prensibini, farklı ekranlarda ölçeklemeyi, CGPoint ve UIFont.pointSize kullanımını açıklamaktadır.
Önemli noktalar
pt (point) — geliştiricinin arayüzü, fiziksel ekran çözünürlüğünden bağımsız soyut koordinatlarla tanımlamasını sağlayan iOS'ta mantıksal bir ölçü birimidir. Apple, points kavramını 2010 yılında iPhone 4 ve Retina ekranın piyasaya sürülmesiyle tanıttı. Retina'dan önce, geliştiriciler doğrudan pikselleri kullanıyordu — bir UI pikseli bir fiziksel piksele eşitti.
iOS koordinat sistemi noktalar üzerine kurulmuştur: (0,0) noktası ekranın sol üst köşesindedir, X ekseni sağa, Y ekseni aşağı doğrudur. Her cihaz sınıfı için nokta cinsinden ekran boyutu sabittir: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (dikey), 1024×768 pt (yatay). Fiziksel çözünürlük 1179×2556 px (iPhone 15 Pro) olabilir — ancak geliştirici noktalarla çalışır.
Apple Human Interface Guidelines'a göre, noktalar UIKit'in temel soyutlamasıdır. Tüm framework'ler — UIKit, SwiftUI, Core Graphics, SpriteKit — noktalarla çalışır. Piksellere dönüştürme, işleme aşamasında UIScreen.nativeScale aracılığıyla otomatik olarak gerçekleşir.
Ölçek faktörü, bir mantıksal noktaya kaç fiziksel pikselin karşılık geldiğini belirler. Apple üç seviye kullanır: @1x — 1 pt = 1 px (Retina olmayan iPad mini, eski modeller), @2x — 1 pt = 2 px (2020 öncesi çoğu iPhone, iPad Retina), @3x — 1 pt = 3 px (iPhone X ve sonrası, iPhone 15 Pro dahil).
| Cihaz | pt cinsinden boyut | px cinsinden boyut | Ölçek |
|---|---|---|---|
| iPhone SE (3. nesil) | 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 (6. nesil) | 744 × 1133 | 1488 × 2266 | @2x |
Ölçek faktörüne UIScreen.main.scale (UIKit için) ve @Environment(\.displayScale) (SwiftUI için) aracılığıyla erişilebilir. Varlıklar yüklenirken kullanılır: sistem, Assets.xcassets'ten @2x veya @3x sonekine sahip görüntüyü otomatik olarak seçer. Geliştirici, Retina cihazlarda @1x görüntüleri yüklememelidir — bu, performansı ve kaliteyi düşürür.
CGPoint yapısı, iOS ve macOS'ta koordinatları temsil etmek için temel türdür. İki alan içerir: x (CGFloat) ve y (CGFloat), değerler nokta cinsinden belirtilir. CGPoint, tüm Apple framework'lerinde kullanılır: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).
// CGPoint — nokta cinsinden koordinatlarla çalışma
import UIKit
// Bir nokta oluşturma
let point = CGPoint(x: 100.0, y: 200.0)
print("Koordinatlar: \(point.x), \(point.y)")
// Matematiksel işlemler
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
x: point.x + offset.x,
y: point.y + offset.y
)
// Noktalar arasındaki mesafe
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)
}
// Noktaları piksellere dönüştürme
extension CGPoint {
func toPixels(scale: CGFloat) -> CGPoint {
CGPoint(x: x * scale, y: y * scale)
}
}Örnekteki toPixels yöntemi, UIScreen.main.scale aracılığıyla noktaları fiziksel piksellere dönüştürmeyi gösterir. UIKit'te bu dönüştürme işleme sırasında otomatik olarak gerçekleşir, ancak Core Graphics ve Metal ile çalışırken geliştiricinin açık piksel dönüştürmeye ihtiyacı olabilir. Tüm animasyon hesaplamaları, çarpışma tespiti ve düzen noktalar cinsinden yapılır.
UIFont.pointSize özelliği, yazı tipi boyutunu nokta cinsinden döndürür — bu, iOS'ta matbaacılıktan miras alınan standart tipografi birimidir (1 pt = 1/72 inç). Apple, Mac OS'in ilk sürümlerinden beri yazı tipleri için pt kullanmaktadır. iOS'ta yazı tipi boyutu, UIFont.systemFont(ofSize:) veya SwiftUI Font.system(size:) aracılığıyla nokta cinsinden belirtilir.
// Swift'te UIFont.pointSize ile çalışma
import UIKit
// pt cinsinden boyutla yazı tipi oluşturma
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)
// pointSize okuma
print("Başlık boyutu: \(titleFont.pointSize) pt")
// Dynamic Type — otomatik ölçekleme
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Ölçeklenmiş: \(scaledFont.pointSize) pt")
// Yazı tipi boyutlarını karşılaştırma
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
UIFont.systemFont(ofSize: size, weight: weight)
}UIFontMetrics, iOS 11'de eklenen dinamik bir yazı tipi ölçekleme mekanizmasıdır. Kullanıcının erişilebilirlik ayarlarına (Settings > Display & Brightness > Text Size) bağlı olarak pointSize'ı otomatik olarak ayarlar. UIFontMetrics kullanılmazsa, yazı tipleri ölçeklenmez ve bu WCAG erişilebilirlik gereksinimlerini ihlal eder.
pt ve px arasındaki fark, iOS geliştirmeyi anlamak için kritiktir. pt mantıksal bir birimdir, px fiziksel bir birimdir. Bir nokta, ölçek faktörüne bağlı olarak 1, 2 veya 3 piksele karşılık gelebilir. Geliştirici noktalarla çalışır, sistem bunları rasterleştirme aşamasında piksellere dönüştürür.
| Özellik | pt | px |
|---|---|---|
| Birim türü | Mantıksal (cihazdan bağımsız) | Fiziksel (donanım pikseli) |
| Çözünürlüğe bağlı | Hayır | Evet |
| Kullanım yeri | UIKit, SwiftUI, Core Graphics, düzen | Görüntüler, Metal, raw buffer |
| Dönüştürme | 1 pt = scale × px (ölçek 1 ila 3) | 1 px = pt / scale |
| Örnek (iPhone 15 Pro) | 393 × 852 pt | 1179 × 2556 px |
Önemli sonuç: Nokta cinsinden arayüz boyutu, aynı sınıftaki tüm cihazlarda aynıdır. 375 pt genişliğinde bir ekran — bu hem iPhone SE hem de iPhone 14 (temel model) için geçerlidir. Tek fark, bu 375 pt'ye kaç fiziksel piksel sığdığıdır. Bu, her cihaz için manuel uyarlama olmadan tek tip bir UI sağlar.
SwiftUI'da geliştirici açıkça noktalarla çalışmaz — tüm boyutlar Dp (cihazdan bağımsız noktalar, pt'ye eşdeğer) aracılığıyla belirtilir. SwiftUI, işleme sırasında otomatik olarak ölçek faktörünü uygular ancak ortam değeri displayScale aracılığıyla erişim sağlar.
// SwiftUI — noktalar ve ölçek faktörü ile çalışma
import SwiftUI
struct ContentView: View {
@Environment(\.displayScale) private var displayScale
var body: some View {
VStack(spacing: 16) {
Text("Başlık")
.font(.system(size: 28, weight: .bold))
Text("Örnek gövde metni")
.font(.body)
HStack {
Text("Ölçek faktörü:")
.font(.caption)
Text("\(displayScale, specifier: "%.1f")")
.font(.caption.weight(.bold))
}
}
.padding(20)
.frame(width: 300)
}
}SwiftUI, pt'yi framework düzeyinde soyutlar. .font(.body) otomatik olarak Dynamic Type'ı kullanır — yazı tipi boyutu kullanıcı ayarlarına göre uyarlanır. SwiftUI, yazı tipi boyutunun piksel cinsinden belirtilmesine izin vermez — yalnızca Font ve tipografi sistemi aracılığıyla. Bu, geliştiricinin ek çabası olmadan arayüz erişilebilirliğini garanti eder.
Sıkça sorulan sorular
pt — ekran çözünürlüğünden bağımsız iOS mantıksal noktası. px — ekranın fiziksel pikseli. iPhone 15 Pro'da bir nokta üç piksele (@3x), iPad Pro'da ikiye (@2x) eşittir. Geliştirici her zaman noktalarla çalışır.
UIKit'te: UIScreen.main.scale. SwiftUI'da: @Environment(\.displayScale). Tipik değerler: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). iPhone 15 Pro Max'te değer 3.0'dır.
Apple, ana metin (UIFontTextStyle.body) için 17 pt önermektedir. Başlıklar için 28–34 pt, altyazılar için 12–13 pt. Dynamic Type stilleri, kullanıcının erişilebilirlik ayarlarına göre otomatik olarak ölçeklenir.
Dynamic Type — iOS 7'de tanıtılan iOS otomatik yazı tipi ölçekleme sistemidir. Metnin sistem yazı tipi boyutu ayarlarına (Text Size) ve erişilebilirlik parametrelerine (Bold Text, Larger Text) uyum sağlamasına olanak tanır. UIFontMetrics veya SwiftUI Font stilleri aracılığıyla uygulanır.
Hayır. Modern Apple cihazları, @2x veya @3x ile Retina ekranlar kullanır. @1x görüntüler yalnızca Retina olmayan iPad'lerle (iPad 2, iPad mini 1. nesil) uyumluluk için gereklidir. iOS 13'ten itibaren tüm cihazlar en az @2x'i destekler.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun