pt — ما هو، Points والقياس في iOS

المؤلف: IT Sectr نُشر: 2026-02-25 وقت القراءة: 8 دق

pt — points، وحدة قياس منطقية في iOS و macOS تجرد الواجهة من دقة الشاشة الفعلية. point واحد يقابل بكسل واحد على شاشة غير 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 مفهوم النقاط مع إطلاق iPhone 4 وشاشة Retina في عام 2010. قبل Retina، كان المطورون يستخدمون البكسلات مباشرة — بكسل واجهة واحد يساوي بكسلًا فعليًا واحدًا.

نظام الإحداثيات في 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 (معظم أجهزة iPhone قبل 2020، iPad Retina)، @3x — 1 pt = 3 px (iPhone X والأحدث، بما في ذلك iPhone 15 Pro).

الجهازالحجم بـ ptالحجم بـ pxالقياس
iPhone SE (الجيل الثالث)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 (الجيل السادس)744 × 11331488 × 2266@2x

قيمة عامل القياس متاحة عبر 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، قد يحتاج المطور إلى تحويل صريح إلى بكسلات. جميع حسابات الحركات، كشف التصادم، والتخطيط تتم بالنقاط.

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")

// Dynamic Type — القياس التلقائي
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: الفروق

الفرق بين pt و px ضروري لفهم تطوير iOS. pt وحدة منطقية، px وحدة فعلية. نقطة واحدة يمكن أن تقابل 1 أو 2 أو 3 بكسلات حسب عامل القياس. المطور يتعامل بالنقاط، النظام يحولها إلى بكسلات في مرحلة التنقيط.

الخاصيةptpx
نوع الوحدةمنطقية (مستقلة عن الجهاز)فعلية (بكسل الأجهزة)
تعتمد على الدقةلانعم
أين تُستخدمUIKit، SwiftUI، Core Graphics، التخطيطالصور، Metal، raw buffer
التحويل1 pt = scale × px (القياس من 1 إلى 3)1 px = pt / scale
مثال (iPhone 15 Pro)393 × 852 pt1179 × 2556 px

الاستنتاج الرئيسي: حجم الواجهة بالنقاط هو نفسه عبر جميع أجهزة الفئة نفسها. شاشة بعرض 375 pt — تنطبق على كل من iPhone SE و iPhone 14 (الموديل الأساسي). الفرق الوحيد هو عدد البكسلات الفعلية التي تتسع في هذه الـ 375 pt. هذا يضمن واجهة مستخدم موحدة دون تكييف يدوي لكل جهاز.

pt في SwiftUI

في SwiftUI، المطور لا يتعامل مع النقاط بشكل صريح — جميع الأحجام تُحدد عبر Dp (نقاط مستقلة عن الجهاز، تعادل pt). يطبق SwiftUI تلقائيًا عامل القياس أثناء التصيير لكنه يوفر الوصول إليه عبر قيمة البيئة displayScale.

swift
// SwiftUI — العمل مع النقاط وعامل القياس
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("عامل القياس:")
                    .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). المطور دائمًا يتعامل بالنقاط.

كيف أعرف عامل قياس الجهاز؟

في 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؟

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 الجيل الأول). منذ iOS 13، جميع الأجهزة تدعم على الأقل @2x.

الخلاصة

  • pt — وحدة منطقية في iOS تجرد الواجهة من الدقة الفعلية وعامل القياس
  • @2x و @3x — عوامل قياس لشاشات Retina تحدد عدد البكسلات لكل نقطة
  • CGPoint — هيكل للإحداثيات بالنقاط، أساس جميع عمليات تحديد المواقع في UIKit
  • UIFont.pointSize — حجم الخط بالنقاط مع دعم Dynamic Type عبر UIFontMetrics
  • SwiftUI يجرد pt بالكامل، مستخدمًا Font و Dynamic Type للتكيف التلقائي
  • الأصول لـ iOS يجب أن تُقدم بـ @2x و @3x، @1x غير مطلوب للأجهزة الحديثة
  • Dynamic Type — آلية إمكانية وصول إلزامية تقوم بتدرج الخطوط تلقائيًا للمستخدم

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا