pt — points, iOS va macOS-da interfeysni jismoniy ekran rezolyutsiyasidan mavhumlashtiradigan mantiqiy o'lchov birligi. Bir point Retinasiz ekranda (@1x) bir pikselga va Retina (@2x, @3x) ekranlarda ikki yoki uch pikselga mos keladi. Maqola pt ishlash prinsipini, turli ekranlarda masshtablashni, CGPoint va UIFont.pointSize dan foydalanishni tushuntiradi.
Asosiy Ma'lumot
pt (point) — iOS da dasturchiga interfeysni displeyning jismoniy rezolyutsiyasidan mustaqil bo'lgan mavhum koordinatalarda tasvirlash imkonini beradigan mantiqiy o'lchov birligidir. Apple 2010 yilda iPhone 4 va Retina displeyning chiqishi bilan point tushunchasini taqdim etdi. Retinagacha dasturchilar to'g'ridan-to'g'ri piksellardan foydalanardilar — bir UI piksel bir jismoniy pikselga teng edi.
iOS koordinatalar tizimi nuqtalar asosida qurilgan: (0,0) nuqtasi ekranning yuqori chap burchagida joylashgan, X o'qi o'ngga, Y o'qi pastga yo'naltirilgan. Nuqtalarda ekran o'lchami har bir qurilma sinfi uchun doimiy qoladi: iPhone SE — 375×667 pt, iPhone 15 Pro — 393×852 pt, iPad — 768×1024 pt (portret), 1024×768 pt (peyzaj). Jismoniy rezolyutsiya 1179×2556 px (iPhone 15 Pro) bo'lishi mumkin — ammo dasturchi nuqtalar bilan ishlaydi.
Apple Human Interface Guidelines ga ko'ra, nuqtalar UIKit ning asosiy mavhumlashuvidir. Barcha freymvorklar — UIKit, SwiftUI, Core Graphics, SpriteKit — nuqtalar bilan ishlaydi. Piksellarga konvertatsiya renderlash bosqichida UIScreen.nativeScale orqali avtomatik ravishda sodir bo'ladi.
Masshtab koeffitsiyenti (scale factor) bir mantiqiy nuqtaga nechta jismoniy piksel to'g'ri kelishini aniqlaydi. Apple uch darajadan foydalanadi: @1x — 1 pt = 1 px (Retinasiz iPad mini, eski modellar), @2x — 1 pt = 2 px (2020 yilgacha bo'lgan aksariyat iPhone'lar, iPad Retina), @3x — 1 pt = 3 px (iPhone X va undan yangilari, jumladan iPhone 15 Pro).
| Qurilma | pt da o'lcham | px da o'lcham | Masshtab |
|---|---|---|---|
| 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 qiymati UIScreen.main.scale (UIKit uchun) va @Environment(\.displayScale) (SwiftUI uchun) orqali mavjud. Aktivlarni yuklashda ishlatiladi: tizim Assets.xcassets dan @2x yoki @3x qo'shimchasiga ega rasmni avtomatik tanlaydi. Dasturchi Retina qurilmalarida @1x rasmlarini yuklamasligi kerak — bu ishlash va sifatni pasaytiradi.
CGPoint strukturasi — iOS va macOS da koordinatalarni ifodalash uchun asosiy turdir. Ikki maydonga ega: x (CGFloat) va y (CGFloat), qiymatlar nuqtalarda beriladi. CGPoint barcha Apple freymvorklarida ishlatiladi: UIKit (frame.origin), Core Graphics (CGContext), SpriteKit (SKNode.position), Core Animation (CALayer.position).
// CGPoint — nuqtalarda koordinatalar bilan ishlash
import UIKit
// Nuqta yaratish
let point = CGPoint(x: 100.0, y: 200.0)
print("Koordinatalar: \(point.x), \(point.y)")
// Matematik amallar
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
x: point.x + offset.x,
y: point.y + offset.y
)
// Nuqtalar orasidagi masofa
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)
}
// Nuqtani piksellarga aylantirish
extension CGPoint {
func toPixels(scale: CGFloat) -> CGPoint {
CGPoint(x: x * scale, y: y * scale)
}
}Misoldagi toPixels metodi nuqtalarni UIScreen.main.scale orqali jismoniy piksellarga konvertatsiya qilishni ko'rsatadi. UIKit da bu konvertatsiya renderlashda avtomatik sodir bo'ladi, ammo Core Graphics va Metal bilan ishlashda dasturchiga piksellarga aniq konvertatsiya kerak bo'lishi mumkin. Barcha animatsiya hisob-kitoblari, to'qnashuvlarni aniqlash va layout nuqtalarda bajariladi.
UIFont.pointSize xususiyati shrift o'lchamini nuqtalarda qaytaradi — bu iOS da tipografikaning standart birligi bo'lib, poligrafiyadan meros bo'lib qolgan (1 pt = 1/72 dyuym). Apple Mac OS ning birinchi versiyalaridanoq shriftlar uchun pt dan foydalanadi. iOS da shrift o'lchami UIFont.systemFont(ofSize:) yoki SwiftUI Font.system(size:) orqali nuqtalarda o'rnatiladi.
// Swift da UIFont.pointSize bilan ishlash
import UIKit
// pt da shrift yaratish
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)
// pointSize ni o'qish
print("Sarlavha o'lchami: \(titleFont.pointSize) pt")
// Dinamik tip — avtomatik masshtablash
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("Masshtablangan: \(scaledFont.pointSize) pt")
// Shrift o'lchamlarini solishtirish
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
UIFont.systemFont(ofSize: size, weight: weight)
}UIFontMetrics — iOS 11 da qo'shilgan dinamik shrift masshtablash mexanizmi. Foydalanuvchining moslashuvchanlik sozlamalariga (Settings > Display & Brightness > Text Size) qarab pointSize ni avtomatik tuzatadi. UIFontMetrics ishlatilmasa, shriftlar masshtablanmaydi, bu WCAG moslashuvchanlik talablarini buzadi.
pt va px o'rtasidagi farq iOS dasturiy ishlanmasini tushunish uchun muhimdir. pt — mantiqiy birlik, px — jismoniy birlik. Bir nuqta scale factor ga qarab 1, 2 yoki 3 pikselga mos kelishi mumkin. Dasturchi nuqtalar bilan ishlaydi, tizim ularni rastrlashtirish bosqichida piksellarga aylantiradi.
| Xususiyat | pt | px |
|---|---|---|
| Birlik turi | Mantiqiy (qurilmadan mustaqil) | Jismoniy (hardware pixel) |
| Rezolyutsiyaga bog'liq | Yo'q | Ha |
| Qayerda ishlatiladi | UIKit, SwiftUI, Core Graphics, layout | Rasmlar, Metal, raw buffer |
| Konvertatsiya | 1 pt = scale × px (scale 1 dan 3 gacha) | 1 px = pt / scale |
| Misol (iPhone 15 Pro) | 393 × 852 pt | 1179 × 2556 px |
Asosiy xulosa: bir sinfdagi barcha qurilmalarda interfeysning nuqtalardagi o'lchami bir xil. 375 pt kenglikdagi ekran — bu ham iPhone SE, ham iPhone 14 (asosiy model). Farq faqat shu 375 pt ga nechta jismoniy piksel sig'ishidadir. Bu har bir qurilma uchun qo'lda moslashtirishsiz bir xil UI ni ta'minlaydi.
SwiftUI da dasturchi ochiqchasiga nuqtalar bilan ishlamaydi — barcha o'lchamlar Dp (device-independent points, pt ekvivalenti) orqali beriladi. SwiftUI renderlashda avtomatik scale factor qo'llaydi, ammo unga environment value displayScale orqali kirish imkonini beradi.
// SwiftUI — nuqtalar va scale factor bilan ishlash
import SwiftUI
struct ContentView: View {
@Environment(\.displayScale) private var displayScale
var body: some View {
VStack(spacing: 16) {
Text("Sarlavha")
.font(.system(size: 28, weight: .bold))
Text("Misolning asosiy matni")
.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 darajasida mavhumlashtiradi. .font(.body) avtomatik ravishda Dynamic Type dan foydalanadi — shrift o'lchami foydalanuvchi sozlamalariga moslashadi. SwiftUI shrift o'lchamini piksellarda o'rnatishga ruxsat bermaydi — faqat Font va tipografika tizimi orqali. Bu dasturchining qo'shimcha harakatisiz interfeysning moslashuvchanligini kafolatlaydi.
Tez-tez beriladigan savollar
pt — iOS mantiqiy nuqtasi, ekran rezolyutsiyasidan mustaqil. px — displeyning jismoniy pikseli. iPhone 15 Pro da bir nuqta uch pikselga (@3x), iPad Pro da ikki pikselga (@2x) teng. Dasturchi har doim nuqtalar bilan ishlaydi.
UIKit da: UIScreen.main.scale. SwiftUI da: @Environment(\.displayScale). Odatdagi qiymatlar: 1.0 (@1x), 2.0 (@2x), 3.0 (@3x). iPhone 15 Pro Max da qiymat 3.0.
Apple asosiy matn uchun 17 pt ni tavsiya qiladi (UIFontTextStyle.body). Sarlavhalar uchun — 28–34 pt. Imzolar uchun — 12–13 pt. Dynamic Type uslublari foydalanuvchining moslashuvchanlik sozlamalariga avtomatik moslashadi.
Dynamic Type — iOS 7 da taqdim etilgan avtomatik shrift masshtablash tizimi. Matnning tizim shrift o'lchami (Text Size) va moslashuvchanlik parametrlariga (Bold Text, Larger Text) moslashishiga imkon beradi. UIFontMetrics yoki SwiftUI Font uslublari orqali amalga oshiriladi.
Yo'q. Zamonaviy Apple qurilmalari @2x yoki @3x Retina displeylardan foydalanadi. @1x rasmlar faqat Retinasiz iPad (iPad 2, iPad mini 1st gen) bilan moslik uchun kerak. iOS 13 dan boshlab barcha qurilmalar kamida @2x ni qo'llab-quvvatlaydi.
Xulosalar
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.