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-এর স্থানাঙ্ক সিস্টেম points-এর উপর নির্মিত: বিন্দু (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) হতে পারে — কিন্তু ডেভেলপার points নিয়ে কাজ করে।
Apple Human Interface Guidelines অনুসারে, points হল UIKit-এর মৌলিক বিমূর্ততা। সমস্ত ফ্রেমওয়ার্ক — UIKit, SwiftUI, Core Graphics, SpriteKit — points-এ কাজ করে। পিক্সেলে রূপান্তর 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন