pt — points، iOS اور macOS میں پیمائش کی ایک منطقی اکائی جو انٹرفیس کو فزیکل اسکرین ریزولوشن سے الگ کرتی ہے۔ ایک point غیر Retina اسکرین (@1x) پر ایک پکسل اور Retina (@2x, @3x) پر دو یا تین پکسلز کے برابر ہوتا ہے۔ یہ مضمون pt کے کام کرنے کے اصول، مختلف اسکرینوں پر اسکیلنگ، CGPoint اور UIFont.pointSize کے استعمال کی وضاحت کرتا ہے۔
اہم نکات
pt (point) — iOS میں پیمائش کی ایک منطقی اکائی جو ڈیولپر کو انٹرفیس کو تجریدی کوآرڈینیٹ میں بیان کرنے کی اجازت دیتی ہے، جو ڈسپلے کی فزیکل ریزولوشن سے آزاد ہوتے ہیں۔ Apple نے 2010 میں iPhone 4 اور Retina ڈسپلے کے اجراء کے ساتھ points کا تصور متعارف کرایا۔ 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 کے ذریعے رینڈرنگ مرحلے میں خودکار طور پر ہوتی ہے۔
اسکیل فیکٹر یہ متعین کرتا ہے کہ ایک منطقی نقطہ کے مقابل کتنے فزیکل پکسلز ہیں۔ Apple تین سطحیں استعمال کرتا ہے: @1x — 1 pt = 1 px (Retina کے بغیر iPad mini، پرانے ماڈلز)، @2x — 1 pt = 2 px (2020 سے پہلے کے زیادہ تر iPhone، iPad Retina)، @3x — 1 pt = 3 px (iPhone X اور نئے، iPhone 15 Pro سمیت)۔
| ڈیوائس | pt میں سائز | px میں سائز | اسکیل |
|---|---|---|---|
| iPhone SE (تیسری نسل) | 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 (چھٹی نسل) | 744 × 1133 | 1488 × 2266 | @2x |
اسکیل فیکٹر UIScreen.main.scale (UIKit کے لیے) اور @Environment(\.displayScale) (SwiftUI کے لیے) کے ذریعے قابل رسائی ہے۔ اسے اثاثے لوڈ کرتے وقت استعمال کیا جاتا ہے: سسٹم خودکار طور پر Assets.xcassets سے @2x یا @3x لاحقہ والی تصویر منتخب کرتا ہے۔ ڈیولپر کو Retina ڈیوائسز پر @1x تصاویر لوڈ نہیں کرنی چاہئیں — اس سے کارکردگی اور معیار کم ہوتا ہے۔
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 کے ساتھ کام کرتے وقت ڈیولپر کو واضح پکسل تبدیلی کی ضرورت ہو سکتی ہے۔ تمام اینیمیشن حسابات، تصادم کا پتہ لگانا اور لے آؤٹ پوائنٹس میں انجام پاتے ہیں۔
UIFont.pointSize پراپرٹی فونٹ کا سائز پوائنٹس میں واپس کرتی ہے — یہ iOS میں نوع ٹائپ کی معیاری اکائی ہے، جو طباعت سے وراثت میں ملی ہے (1 pt = 1/72 انچ)۔ Apple Mac OS کے ابتدائی ورژنز سے فونٹس کے لیے pt استعمال کر رہا ہے۔ iOS میں، فونٹ کا سائز UIFont.systemFont(ofSize:) یا SwiftUI Font.system(size:) کے ذریعے پوائنٹس میں متعین کیا جاتا ہے۔
// Swift میں UIFont.pointSize کے ساتھ کام
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 میں شامل کردہ ایک متحرک فونٹ اسکیلنگ میکانزم ہے۔ یہ صارف کی رسائی کی ترتیبات (Settings > Display & Brightness > Text Size) کی بنیاد پر pointSize کو خودکار طور پر ایڈجسٹ کرتا ہے۔ UIFontMetrics کے استعمال کے بغیر، فونٹس اسکیل نہیں ہوتے، جو WCAG رسائی کے تقاضوں کی خلاف ورزی کرتا ہے۔
pt اور px کے درمیان فرق iOS ڈیولپمنٹ کو سمجھنے کے لیے اہم ہے۔ pt ایک منطقی اکائی ہے، px ایک فزیکل اکائی ہے۔ ایک نقطہ اسکیل فیکٹر کے لحاظ سے 1، 2 یا 3 پکسلز کے برابر ہو سکتا ہے۔ ڈیولپر پوائنٹس میں کام کرتا ہے، سسٹم راسٹرائزیشن مرحلے میں انہیں پکسلز میں تبدیل کرتا ہے۔
| خصوصیت | pt | px |
|---|---|---|
| اکائی کی قسم | منطقی (ڈیوائس سے آزاد) | فزیکل (ہارڈویئر پکسل) |
| ریزولوشن پر منحصر | نہیں | ہاں |
| استعمال کی جگہ | UIKit, SwiftUI, Core Graphics, لے آؤٹ | تصاویر, Metal, raw buffer |
| تبدیلی | 1 pt = scale × px (اسکیل 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 رینڈرنگ کے دوران خودکار طور پر اسکیل فیکٹر لاگو کرتا ہے لیکن ماحولی قدر displayScale کے ذریعے اس تک رسائی فراہم کرتا ہے۔
// 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 — 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 مرکزی متن (UIFontTextStyle.body) کے لیے 17 pt تجویز کرتا ہے۔ عنوانات کے لیے 28–34 pt، کیپشنز کے لیے 12–13 pt۔ Dynamic Type اسٹائلز صارف کی رسائی کی ترتیبات کی بنیاد پر خودکار طور پر اسکیل ہوتے ہیں۔
Dynamic Type — iOS 7 میں متعارف کردہ iOS خودکار فونٹ اسکیلنگ سسٹم۔ یہ متن کو سسٹم فونٹ سائز کی ترتیبات (Text Size) اور رسائی کے پیرامیٹرز (Bold Text, Larger Text) کے مطابق ڈھلنے دیتا ہے۔ UIFontMetrics یا SwiftUI Font اسٹائلز کے ذریعے لاگو کیا جاتا ہے۔
نہیں۔ جدید Apple ڈیوائسز @2x یا @3x کے ساتھ Retina ڈسپلے استعمال کرتی ہیں۔ @1x تصاویر صرف غیر Retina iPad (iPad 2, iPad mini پہلی نسل) کے ساتھ مطابقت کے لیے ضروری ہیں۔ iOS 13 سے، تمام ڈیوائسز کم از کم @2x کو سپورٹ کرتی ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں