pt — چیست، نقاط و مقیاس‌بندی در iOS

نویسنده: IT Sectr منتشر شده: 2026-02-25 زمان مطالعه: 8 دقیقه

pt — نقاط، واحد اندازه‌گیری منطقی در iOS و macOS که رابط را از رزولوشن فیزیکی صفحه انتزاع می‌کند. یک نقطه معادل یک پیکسل در صفحه بدون Retina (@1x) و دو یا سه پیکسل در Retina (@2x, @3x) است. مقاله اصل کار pt، مقیاس‌بندی در نمایشگرهای مختلف، استفاده از CGPoint و UIFont.pointSize را توضیح می‌دهد.

مهم

  • pt — نقطه منطقی iOS، مستقل از رزولوشن فیزیکی صفحه
  • @1x, @2x, @3x — ضریب مقیاس که تعیین می‌کند چند پیکسل در یک نقطه قرار می‌گیرد
  • CGPoint — ساختاری برای مختصات در pt، اساس تمام عملیات موقعیت‌یابی
  • UIFont.pointSize — اندازه قلم بر حسب نقطه، همیشه در pt بازگردانده می‌شود
  • فاصله از صفحه: iPhone 15 Pro — 1 pt = 3 px در تراکم پیکسل 460 PPI

pt در iOS چیست؟

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 انجام می‌شود.

ضرایب مقیاس: @1x, @2x, @3x

ضریب مقیاس (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 × 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

مقدار scale factor از طریق UIScreen.main.scale (برای UIKit) و @Environment(\.displayScale) (برای SwiftUI) قابل دسترس است. هنگام بارگذاری منابع استفاده می‌شود: سیستم به طور خودکار تصویر با پسوند @2x یا @3x را از Assets.xcassets انتخاب می‌کند. توسعه‌دهنده تصاویر @1x را در دستگاه‌های Retina بارگذاری نمی‌کند — این کار عملکرد و کیفیت را کاهش می‌دهد.

CGPoint و مختصات بر حسب نقطه

ساختار CGPoint — نوع پایه برای نمایش مختصات در iOS و macOS. شامل دو فیلد: x (CGFloat) و y (CGFloat) است، مقادیر بر حسب نقطه داده می‌شوند. CGPoint در همه فریمورک‌های Apple استفاده می‌شود: UIKit (frame.origin)، Core Graphics (CGContext)، SpriteKit (SKNode.position)، Core Animation (CALayer.position).

swift
// 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 و تایپوگرافی

ویژگی UIFont.pointSize اندازه قلم را بر حسب نقطه برمی‌گرداند — این واحد استاندارد تایپوگرافی در iOS است که از صنعت چاپ به ارث رسیده (1 pt = 1/72 اینچ). Apple از pt برای قلم‌ها از اولین نسخه‌های Mac OS استفاده می‌کند. در iOS اندازه قلم بر حسب نقطه از طریق UIFont.systemFont(ofSize:) یا SwiftUI Font.system(size:) تنظیم می‌شود.

swift
// کار با 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 vs px: تفاوت‌ها

تفاوت بین pt و px برای درک توسعه iOS حیاتی است. pt — واحد منطقی، px — واحد فیزیکی. یک نقطه می‌تواند معادل 1، 2 یا 3 پیکسل بسته به scale factor باشد. توسعه‌دهنده با نقاط کار می‌کند، سیستم در مرحله رasterسازی آنها را به پیکسل تبدیل می‌کند.

ویژگیptpx
نوع واحدمنطقی (مستقل از دستگاه)فیزیکی (پیکسل سخت‌افزاری)
وابسته به رزولوشنخیربله
محل استفادهUIKit، SwiftUI، Core Graphics، layoutتصاویر، Metal، بافر خام
تبدیل1 pt = scale × px (scale از 1 تا 3)1 px = pt / scale
مثال (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

نتیجه کلیدی: اندازه رابط بر حسب نقطه در تمام دستگاه‌های یک کلاس یکسان است. صفحه با عرض 375 pt — این هم iPhone SE است و هم iPhone 14 (مدل پایه). تفاوت فقط در تعداد پیکسل‌های فیزیکی است که در این 375 pt جای می‌گیرند. این امر UI یکنواخت را بدون تطبیق دستی برای هر دستگاه تضمین می‌کند.

pt در SwiftUI

در SwiftUI توسعه‌دهنده به طور صریح با نقاط کار نمی‌کند — همه اندازه‌ها از طریق Dp (نقاط مستقل از دستگاه، معادل pt) داده می‌شوند. SwiftUI به طور خودکار scale factor را هنگام رندرینگ اعمال می‌کند، اما دسترسی به آن را از طریق environment value displayScale فراهم می‌کند.

swift
// 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 و px چیست؟

pt — نقطه منطقی iOS، مستقل از رزولوشن صفحه. px — پیکسل فیزیکی نمایشگر. یک نقطه در iPhone 15 Pro برابر سه پیکسل (@3x) و در iPad Pro برابر دو پیکسل (@2x) است. توسعه‌دهنده همیشه با نقاط کار می‌کند.

چگونه scale factor دستگاه را بفهمیم؟

در UIKit: UIScreen.main.scale. در SwiftUI: @Environment(\.displayScale). مقادیر معمول: 1.0 (@1x)، 2.0 (@2x)، 3.0 (@3x). در iPhone 15 Pro Max مقدار 3.0 است.

برای body text از چه اندازه قلمی استفاده کنیم؟

Apple 17 pt را برای متن اصلی توصیه می‌کند (UIFontTextStyle.body). برای عنوان‌ها — 28–34 pt. برای زیرنویس‌ها — 12–13 pt. سبک‌های Dynamic Type به طور خودکار با تنظیمات دسترسی کاربر مقیاس‌بندی می‌شوند.

Dynamic Type در iOS چیست؟

Dynamic Type — سیستم مقیاس‌بندی خودکار قلم در iOS که در iOS 7 معرفی شد. به متن اجازه می‌دهد با تنظیمات سیستم اندازه قلم (Text Size) و پارامترهای دسترسی (Bold Text، Larger Text) تطبیق یابد. از طریق UIFontMetrics یا سبک‌های SwiftUI Font پیاده‌سازی می‌شود.

آیا نیاز به ایجاد منابع @1x برای iOS است؟

خیر. دستگاه‌های مدرن Apple از نمایشگرهای Retina با @2x یا @3x استفاده می‌کنند. تصاویر @1x فقط برای سازگاری با iPad بدون Retina (iPad 2، iPad mini 1st gen) نیاز هستند. از iOS 13 به بعد، همه دستگاه‌ها حداقل @2x را پشتیبانی می‌کنند.

خلاصه

  • pt — واحد منطقی iOS که رابط را از رزولوشن فیزیکی و scale factor انتزاع می‌کند
  • @2x و @3x — ضرایب مقیاس برای نمایشگرهای Retina که تعداد پیکسل‌های هر نقطه را تعیین می‌کنند
  • CGPoint — ساختار مختصات بر حسب نقطه، اساس عملیات موقعیت‌یابی در UIKit
  • UIFont.pointSize — اندازه قلم بر حسب نقطه با پشتیبانی Dynamic Type از طریق UIFontMetrics
  • SwiftUI pt را کاملاً انتزاع می‌کند و از Font و Dynamic Type برای تطبیق خودکار استفاده می‌کند
  • منابع iOS باید در @2x و @3x ارائه شوند، @1x برای دستگاه‌های مدرن لازم نیست
  • Dynamic Type — مکانیسم دسترسی اجباری که قلم‌ها را به طور خودکار برای کاربر مقیاس‌بندی می‌کند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید