pt — نقاط، واحد اندازهگیری منطقی در iOS و macOS که رابط را از رزولوشن فیزیکی صفحه انتزاع میکند. یک نقطه معادل یک پیکسل در صفحه بدون Retina (@1x) و دو یا سه پیکسل در Retina (@2x, @3x) است. مقاله اصل کار pt، مقیاسبندی در نمایشگرهای مختلف، استفاده از CGPoint و UIFont.pointSize را توضیح میدهد.
مهم
pt (point) — واحد اندازهگیری منطقی در iOS که به توسعهدهنده اجازه میدهد رابط را در مختصات انتزاعی، مستقل از رزولوشن فیزیکی نمایشگر توصیف کند. Apple مفهوم point را با عرضه iPhone 4 و نمایشگر Retina در سال 2010 معرفی کرد. قبل از Retina، توسعهدهندگان مستقیماً از پیکسلها استفاده میکردند — یک پیکسل UI معادل یک پیکسل فیزیکی بود.
سیستم مختصات iOS بر اساس نقاط ساخته شده است: نقطه (0,0) در گوشه بالا سمت چپ صفحه قرار دارد، محور X به سمت راست و محور Y به سمت پایین است. اندازه صفحه بر حسب نقطه برای هر کلاس دستگاه ثابت میماند: iPhone SE — 375×667 pt، iPhone 15 Pro — 393×852 pt، iPad — 768×1024 pt (عمودی)، 1024×768 pt (افقی). رزولوشن فیزیکی میتواند 1179×2556 px (iPhone 15 Pro) باشد — اما توسعهدهنده با نقاط کار میکند.
بر اساس Apple Human Interface Guidelines، نقاط انتزاع بنیادی UIKit هستند. همه فریمورکها — UIKit، SwiftUI، Core Graphics، SpriteKit — با نقاط کار میکنند. تبدیل به پیکسل به طور خودکار در مرحله رندرینگ از طریق UIScreen.nativeScale انجام میشود.
ضریب مقیاس (scale factor) تعیین میکند که چند پیکسل فیزیکی معادل یک نقطه منطقی است. Apple از سه سطح استفاده میکند: @1x — 1 pt = 1 px (iPad mini بدون Retina، مدلهای قدیمی)، @2x — 1 pt = 2 px (بیشتر آیفونها تا سال 2020، iPad Retina)، @3x — 1 pt = 3 px (iPhone X و جدیدتر، از جمله iPhone 15 Pro).
| دستگاه | اندازه بر حسب pt | اندازه بر حسب px | مقیاس |
|---|---|---|---|
| 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 از طریق UIScreen.main.scale (برای UIKit) و @Environment(\.displayScale) (برای SwiftUI) قابل دسترس است. هنگام بارگذاری منابع استفاده میشود: سیستم به طور خودکار تصویر با پسوند @2x یا @3x را از Assets.xcassets انتخاب میکند. توسعهدهنده تصاویر @1x را در دستگاههای Retina بارگذاری نمیکند — این کار عملکرد و کیفیت را کاهش میدهد.
ساختار CGPoint — نوع پایه برای نمایش مختصات در iOS و macOS. شامل دو فیلد: x (CGFloat) و y (CGFloat) است، مقادیر بر حسب نقطه داده میشوند. CGPoint در همه فریمورکهای Apple استفاده میشود: UIKit (frame.origin)، Core Graphics (CGContext)، SpriteKit (SKNode.position)، Core Animation (CALayer.position).
// CGPoint — کار با مختصات بر حسب نقطه
import UIKit
// ایجاد نقطه
let point = CGPoint(x: 100.0, y: 200.0)
print("مختصات: \(point.x), \(point.y)")
// عملیات ریاضی
let offset = CGPoint(x: 16.0, y: 8.0)
let translated = CGPoint(
x: point.x + offset.x,
y: point.y + offset.y
)
// فاصله بین نقاط
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)
}
// تبدیل نقطه به پیکسل
extension CGPoint {
func toPixels(scale: CGFloat) -> CGPoint {
CGPoint(x: x * scale, y: y * scale)
}
}متد toPixels در مثال تبدیل نقاط به پیکسلهای فیزیکی را از طریق UIScreen.main.scale نشان میدهد. در UIKit این تبدیل به طور خودکار هنگام رندرینگ انجام میشود، اما در Core Graphics و هنگام کار با Metal، توسعهدهنده ممکن است نیاز به تبدیل صریح به پیکسل داشته باشد. تمام محاسبات انیمیشن، تشخیص برخورد و layout در نقاط انجام میشود.
ویژگی UIFont.pointSize اندازه قلم را بر حسب نقطه برمیگرداند — این واحد استاندارد تایپوگرافی در iOS است که از صنعت چاپ به ارث رسیده (1 pt = 1/72 اینچ). Apple از pt برای قلمها از اولین نسخههای Mac OS استفاده میکند. در iOS اندازه قلم بر حسب نقطه از طریق UIFont.systemFont(ofSize:) یا SwiftUI Font.system(size:) تنظیم میشود.
// کار با UIFont.pointSize در Swift
import UIKit
// ایجاد قلم با اندازه بر حسب pt
let titleFont = UIFont.systemFont(ofSize: 28.0, weight: .bold)
let bodyFont = UIFont.systemFont(ofSize: 17.0)
let captionFont = UIFont.systemFont(ofSize: 12.0)
// خواندن pointSize
print("اندازه عنوان: \(titleFont.pointSize) pt")
// نوع پویا — مقیاسبندی خودکار
let scaledFont = UIFontMetrics.default.scaledFont(for: bodyFont)
print("مقیاسبندی شده: \(scaledFont.pointSize) pt")
// مقایسه اندازه قلمها
func font(from size: CGFloat, weight: UIFont.Weight) -> UIFont {
UIFont.systemFont(ofSize: size, weight: weight)
}UIFontMetrics — مکانیسم مقیاسبندی پویای قلمها که در iOS 11 اضافه شده است. به طور خودکار pointSize را با توجه به تنظیمات دسترسی کاربر (Settings > Display & Brightness > Text Size) تنظیم میکند. بدون استفاده از UIFontMetrics، قلمها مقیاسبندی نمیشوند که الزامات WCAG برای دسترسی را نقض میکند.
تفاوت بین pt و px برای درک توسعه iOS حیاتی است. pt — واحد منطقی، px — واحد فیزیکی. یک نقطه میتواند معادل 1، 2 یا 3 پیکسل بسته به scale factor باشد. توسعهدهنده با نقاط کار میکند، سیستم در مرحله رasterسازی آنها را به پیکسل تبدیل میکند.
| ویژگی | pt | px |
|---|---|---|
| نوع واحد | منطقی (مستقل از دستگاه) | فیزیکی (پیکسل سختافزاری) |
| وابسته به رزولوشن | خیر | بله |
| محل استفاده | UIKit، SwiftUI، Core Graphics، layout | تصاویر، Metal، بافر خام |
| تبدیل | 1 pt = scale × px (scale از 1 تا 3) | 1 px = pt / scale |
| مثال (iPhone 15 Pro) | 393 × 852 pt | 1179 × 2556 px |
نتیجه کلیدی: اندازه رابط بر حسب نقطه در تمام دستگاههای یک کلاس یکسان است. صفحه با عرض 375 pt — این هم iPhone SE است و هم iPhone 14 (مدل پایه). تفاوت فقط در تعداد پیکسلهای فیزیکی است که در این 375 pt جای میگیرند. این امر UI یکنواخت را بدون تطبیق دستی برای هر دستگاه تضمین میکند.
در SwiftUI توسعهدهنده به طور صریح با نقاط کار نمیکند — همه اندازهها از طریق Dp (نقاط مستقل از دستگاه، معادل pt) داده میشوند. SwiftUI به طور خودکار scale factor را هنگام رندرینگ اعمال میکند، اما دسترسی به آن را از طریق environment value displayScale فراهم میکند.
// SwiftUI — کار با نقاط و scale factor
import SwiftUI
struct ContentView: View {
@Environment(\.displayScale) private var displayScale
var body: some View {
VStack(spacing: 16) {
Text("عنوان")
.font(.system(size: 28, weight: .bold))
Text("متن اصلی مثال")
.font(.body)
HStack {
Text("Scale factor:")
.font(.caption)
Text("\(displayScale, specifier: "%.1f")")
.font(.caption.weight(.bold))
}
}
.padding(20)
.frame(width: 300)
}
}SwiftUI pt را در سطح فریمورک انتزاع میکند. .font(.body) به طور خودکار از Dynamic Type استفاده میکند — اندازه قلم با تنظیمات کاربر تطبیق مییابد. SwiftUI اجازه تنظیم اندازه قلم بر حسب پیکسل را نمیدهد — فقط از طریق Font و سیستم تایپوگرافی. این امر دسترسی به رابط را بدون تلاش اضافی توسعهدهنده تضمین میکند.
سوالات متداول
pt — نقطه منطقی iOS، مستقل از رزولوشن صفحه. px — پیکسل فیزیکی نمایشگر. یک نقطه در iPhone 15 Pro برابر سه پیکسل (@3x) و در iPad Pro برابر دو پیکسل (@2x) است. توسعهدهنده همیشه با نقاط کار میکند.
در UIKit: UIScreen.main.scale. در SwiftUI: @Environment(\.displayScale). مقادیر معمول: 1.0 (@1x)، 2.0 (@2x)، 3.0 (@3x). در iPhone 15 Pro Max مقدار 3.0 است.
Apple 17 pt را برای متن اصلی توصیه میکند (UIFontTextStyle.body). برای عنوانها — 28–34 pt. برای زیرنویسها — 12–13 pt. سبکهای Dynamic Type به طور خودکار با تنظیمات دسترسی کاربر مقیاسبندی میشوند.
Dynamic Type — سیستم مقیاسبندی خودکار قلم در iOS که در iOS 7 معرفی شد. به متن اجازه میدهد با تنظیمات سیستم اندازه قلم (Text Size) و پارامترهای دسترسی (Bold Text، Larger Text) تطبیق یابد. از طریق UIFontMetrics یا سبکهای SwiftUI Font پیادهسازی میشود.
خیر. دستگاههای مدرن Apple از نمایشگرهای Retina با @2x یا @3x استفاده میکنند. تصاویر @1x فقط برای سازگاری با iPad بدون Retina (iPad 2، iPad mini 1st gen) نیاز هستند. از iOS 13 به بعد، همه دستگاهها حداقل @2x را پشتیبانی میکنند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.