Dynamic Island হলো iPhone 14 Pro এবং নতুন মডেলের উপরের অংশে একটি ইন্টারঅ্যাকটিভ এলাকা, যা হার্ডওয়্যার ক্যামেরা কাটআউটকে সফ্টওয়্যার বিজ্ঞপ্তির সাথে একটি ইউজার ইন্টারফেস উপাদানে একত্রিত করে। Dynamic Island কন্টেন্টের ধরন অনুযায়ী তার আকার এবং রূপ পরিবর্তন করে: কল, টাইমার, মিউজিক, Live Activity, AirPods সংযোগ। ডেভেলপাররা ActivityKit এবং WidgetKit-ভিত্তিক Dynamic Island API-এর মাধ্যমে ইন্টারঅ্যাক্ট করে। আরও জানুন Dynamic Island HIG-এ।
মূল পয়েন্ট
Dynamic Island হলো iPhone 14 Pro, 15 Pro এবং নতুন মডেলের একটি ইন্টারফেস উপাদান যা ফ্রন্ট ক্যামেরা এবং Face ID সেন্সরের চারপাশের এলাকা ব্যবহার করে বিজ্ঞপ্তি এবং Live Activity প্রদর্শনের জন্য। পুরানো notch-এর বিপরীতে, যা একটি স্থির কালো উপাদান ছিল, Dynamic Island গতিশীলভাবে আকার এবং রূপ পরিবর্তন করে: টাইমার দেখানোর জন্য প্রসারিত হয়, সংযুক্ত AirPods-এর আইকনের জন্য সঙ্কুচিত হয়, খেলার ফলাফলের জন্য আয়তক্ষেত্রে পরিণত হয়।
প্রযুক্তিগত বাস্তবায়ন Dynamic Island OLED স্ক্রিনের হার্ডওয়্যার পিল-আকৃতির কাটআউট এবং এর চারপাশে সফ্টওয়্যার পিক্সেল প্রসেসিং-এর উপর ভিত্তি করে। সিস্টেম Island এলাকায় পিক্সেল রিফ্রেশ রেট 120 Hz পর্যন্ত বাড়ায় এবং কন্টেন্ট এবং ক্যামেরার কালো এলাকার মধ্যে মসৃণ ট্রানজিশনের জন্য স্মুথিং ব্যবহার করে। ডেভেলপার Island সরাসরি প্রোগ্রাম করে না — সে ActivityKit-এর মাধ্যমে কন্টেন্ট তৈরি করে, এবং সিস্টেম এটি কাটআউটের চারপাশে স্বয়ংক্রিয়ভাবে স্থাপন করে।
ব্যবহারকারীর ধারণা — Dynamic Island একটি হার্ডওয়্যার ত্রুটিকে একটি কার্যকরী উপাদানে রূপান্তরিত করে। Apple-এর গবেষণা অনুসারে, ব্যবহারকারীরা কয়েকদিন ব্যবহারের পর Island-কে স্ক্রিনের একটি প্রাকৃতিক অংশ হিসেবে উপলব্ধি করে। হাইলাইটিং এবং মনোযোগ-সুইচিং অ্যানিমেশন — উদাহরণস্বরূপ, একটি আগত বিজ্ঞপ্তি Island-কে সরিয়ে দেয় এবং 120 ফ্রেম প্রতি সেকেন্ডে সম্প্রসারণ প্রভাব সহ কন্টেন্ট দেখায়।
Dynamic Island সমর্থন করে তিনটি কন্টেন্ট ডিসপ্লে মোড, যা সিস্টেম অ্যাক্টিভিটির ধরন এবং সংখ্যার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে নির্বাচন করে। ডেভেলপার WidgetBundle-এ প্রতিটি মোডের জন্য UI নির্ধারণ করে, কিন্তু কোন মোড বর্তমানে সক্রিয় তা নিয়ন্ত্রণ করে না। সিস্টেম একসাথে দুটি অ্যাক্টিভিটিও প্রদর্শন করতে পারে: একটি কাটআউটের বাম দিকে, অন্যটি ডান দিকে।
| মোড | আকার | কন্টেন্ট | উদাহরণ |
|---|---|---|---|
| কমপ্যাক্ট | ~50pt প্রস্থ | আইকন + ছোট টেক্সট | টাইমার: ঘড়ির আইকন + "05:00" |
| ন্যূনতম | ~22pt গোল | শুধু অ্যাপ আইকন | স্ক্রিনশট বিজ্ঞপ্তি |
| বিস্তৃত | ~300pt x 80pt | কাস্টম SwiftUI View | লোগো সহ খেলার স্কোর |
মোডের মধ্যে ট্রানজিশন ease-in-out কার্ভ সহ 0.4–0.6 সেকেন্ডের একটি সিস্টেম অ্যানিমেশন দিয়ে সম্পাদিত হয়। যখন একটি নতুন Activity উপস্থিত হয়, Island কমপ্যাক্ট থেকে বিস্তৃত মোডে প্রসারিত হয়। শেষ হলে, আবার সঙ্কুচিত হয়। ব্যবহারকারী বামে সোয়াইপ করে জোরপূর্বক বিস্তৃত মোড সংক্ষিপ্ত করতে পারে — Island কমপ্যাক্ট বা ন্যূনতম মোডে চলে যায়। যদি আপডেটের আশা না করা হয় তবে সিস্টেম 5 সেকেন্ড নিষ্ক্রিয়তার পর বিস্তৃত মোড সংক্ষিপ্ত করে।
দুটি অ্যাক্টিভিটি — যদি দুটি অ্যাপের সক্রিয় Live Activities থাকে, Dynamic Island সেগুলি কাটআউটের উভয় পাশে দেখায়। বাম পাশ প্রথম শুরু করা Activity, ডান পাশ দ্বিতীয়টি। যদি শুধুমাত্র একটি অ্যাক্টিভিটি থাকে, এটি বাম পাশ দখল করে, ডান পাশ খালি থাকে। যেকোনো পাশ ট্যাপ করলে Island প্রসারিত হয় এবং সেই Activity-র কন্টেন্ট দেখায়। দ্বন্দ্বের ক্ষেত্রে সিস্টেম নিজেই সিদ্ধান্ত নেয় কোন Activity-কে অগ্রাধিকার দিতে হবে।
Dynamic Island কন্টেন্ট শুধুমাত্র ActivityKit ফ্রেমওয়ার্কের সাথে Live Activity-র মাধ্যমে তৈরি করা হয়। ডেভেলপার কোডে চারটি এলাকা নির্ধারণ করে: কমপ্যাক্ট লিডিং (compactLeading), কমপ্যাক্ট ট্রেলিং (compactTrailing), ন্যূনতম (minimal) এবং বিস্তৃত (expanded)। প্রতিটি এলাকা একটি SwiftUI View যা context-এর মাধ্যমে Activity-র বর্তমান অবস্থা গ্রহণ করে। যদি কোনো এলাকা নির্ধারিত না থাকে, Island সেই মোডে সেই Activity প্রদর্শন করে না।
struct DeliveryIsland: DynamicIsland {
var body: some DynamicIslandContent {
DynamicIslandExpandedContent {
VStack(alignment: .leading) {
Text(context.state.status)
.font(.headline)
ProgressView(
value: context.state.progress
)
Text("ETA: \(context.state.minutes) min")
.font(.caption)
}
} compactLeading: {
Image(systemName: "box.truck")
} compactTrailing: {
Text("\(context.state.minutes) min")
.monospacedDigit()
} minimal: {
Image(systemName: "box.truck")
}
}
}
Dynamic Island-এ SwiftUI সীমাবদ্ধতা — উপলব্ধ উপাদান: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (শুধু Link-এর মাধ্যমে), Gauge। নিষিদ্ধ: ScrollView, List, TabView, অ্যানিমেশন, gesture recognizers। রঙের প্যালেট — শুধু System Colors (label, secondaryLabel, tint)। ফন্ট — .caption থেকে .title3 পর্যন্ত সিস্টেম সাইজ। কাস্টম ফন্ট এবং SF Symbols সঠিকভাবে কাজ করে।
Dynamic Island পরীক্ষা — Xcode Dynamic Island সমর্থন সহ একটি সিমুলেটর সরবরাহ করে। টার্গেট ডিভাইস হিসেবে iPhone 14 Pro বা 15 Pro নির্বাচন করুন। ActivityKit বিভিন্ন Island মোড সিমুলেট করে: Xcode Debug মেনুতে Dynamic Island Mode বোতাম কমপ্যাক্ট, ন্যূনতম এবং বিস্তৃতের মধ্যে সুইচ করে। একসাথে একাধিক Activities পরীক্ষার জন্য, বিভিন্ন ActivityID সহ স্কিম ব্যবহার করুন বা অ্যাপের দুটি ইনস্ট্যান্স চালু করুন।
সিস্টেম ইভেন্ট — কল, AirPods, Face ID, চার্জিং এবং অন্যান্য — কাস্টম Live Activities-এর উপর অগ্রাধিকার পায়। যখন একটি সিস্টেম ইভেন্ট ঘটে, Island কাস্টম কন্টেন্ট প্রদর্শন বন্ধ করে এবং সিস্টেম কন্টেন্ট দেখায়। সিস্টেম ইভেন্ট শেষ হওয়ার পর, Island অ্যানিমেশন সহ কাস্টম কন্টেন্টে ফিরে আসে। ডেভেলপার সিস্টেম ইভেন্ট বাতিল বা পরিবর্তন করতে পারে না — সেগুলি iOS অপারেটিং সিস্টেম স্তরে পরিচালিত হয়।
| সিস্টেম ইভেন্ট | প্রদর্শন ফরম্যাট | অগ্রাধিকার |
|---|---|---|
| ইনকামিং কল | কন্টাক্ট নাম সহ ন্যূনতম কার্ড | উচ্চ |
| AirPods | অ্যানিমেশন + ব্যাটারি চার্জ | মধ্যম |
| Face ID | লক আইকন | মধ্যম |
| চার্জিং | বজ্রপাতের আইকন + শতাংশ | নিম্ন |
| AirDrop | স্থানান্তর অগ্রগতি | মধ্যম |
| স্ক্রিনশট | শাটার অ্যানিমেশন | নিম্ন |
ইনকামিং কল — সবচেয়ে গুরুত্বপূর্ণ সিস্টেম ইভেন্ট। Dynamic Island কলার নাম কাটআউটের বাম দিকে এবং সময়কাল/স্ট্যাটাস ডান দিকে দেখায়। সক্রিয় কলের সময়, Island কোনো কাস্টম Live Activities প্রদর্শন করে না। ব্যবহারকারী কল স্ক্রিন খুলতে Island প্রসারিত করতে পারে অথবা ব্যাকগ্রাউন্ডে সক্রিয় কল নিয়ে অ্যাপে কাজ চালিয়ে যেতে সংক্ষিপ্ত করতে পারে।
AirPods সংযোগ — iPhone-এর কাছে কেস খুললে, Dynamic Island সংযোগ অ্যানিমেট করে এবং প্রতিটি ইয়ারবাড এবং কেসের চার্জ দেখায়। অ্যানিমেশন 2–3 সেকেন্ড স্থায়ী হয়, তারপর Island তার আগের অবস্থায় ফিরে আসে। ব্যবহারকারীর কোনো সক্রিয় Live Activities না থাকলে, Island খালি থাকে। AirPods Pro 2 স্টেম চাপলে ভলিউম এবং নয়েজ ক্যানসেলেশন মোডও প্রদর্শন করে।
Dynamic Island সেরা অনুশীলন Apple-এর থেকে গুণগত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করতে অনুসরণ করার পরামর্শ দেওয়া হয়। কমপ্যাক্ট মোডে শুধুমাত্র সবচেয়ে গুরুত্বপূর্ণ তথ্য প্রদর্শিত হওয়া উচিত — একটি আইকন এবং একটি সংখ্যা বা ছোট লেবেল। বিস্তৃত মোড — অপ্রয়োজনীয় উপাদান ছাড়া শুধুমাত্র মূল তথ্য। কমপ্যাক্ট মোডে ২০ অক্ষরের বেশি টেক্সট রাখা এড়িয়ে চলুন — সিস্টেম ইলিপসিস দিয়ে টেক্সট কেটে ফেলে।
Dynamic Island-এর জন্য পুশ আপডেট — বিরল আপডেটের (অর্ডার স্ট্যাটাস, খেলার ফলাফল) জন্য ActivityKit push এবং ঘন ঘন টাইমার বা স্টপওয়াচের জন্য লোকাল আপডেট ব্যবহার করুন। পুশ নোটিফিকেশন APNs-এর মাধ্যমে যায় এবং Island-এ প্রদর্শিত হতে 0.5–2 সেকেন্ড সময় নেয়। StaleDate — কন্টেন্টের মেয়াদ শেষ হওয়ার তারিখ নির্ধারণ করুন: যদি সময়মতো আপডেট না আসে, সিস্টেম কন্টেন্টের পরিবর্তে ধূসর ব্যাকগ্রাউন্ড দেখায়, ব্যবহারকারীকে পুরানো ডেটা সম্পর্কে সংকেত দেয়।
func updateDelivery(activity: Activity<DeliveryAttributes>) {
Task {
let newContent = ActivityContent(
state: DeliveryAttributes.ContentState(
status: .delivered,
estimatedMinutes: 0
),
staleDate: Date().addingTimeInterval(300)
)
await activity.update(newContent)
// ২ সেকেন্ডের মধ্যে Activity শেষ করা হচ্ছে
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
শক্তি খরচ — Dynamic Island এবং Live Activities-এর OLED ডিসপ্লে হার্ডওয়্যার অপ্টিমাইজেশানের কারণে ব্যাটারিতে ন্যূনতম প্রভাব পড়ে। কাটআউটের চারপাশে কালো পিক্সেল বন্ধ থাকে এবং কন্টেন্ট একটি ডেডিকেটেড কোপ্রসেসরে রেন্ডার হয়। প্রতি ৫ মিনিটে আপডেট করলে গড় Live Activity খরচ প্রতি ঘন্টায় ১% ব্যাটারির চেয়ে কম। কম ব্যাটারিতে (২০% এর নিচে) বা পাওয়ার সেভিং মোডে সিস্টেম স্বয়ংক্রিয়ভাবে Island বন্ধ করে দেয়।
Dynamic Island-এর জন্য ডিজাইন মূল অ্যাপ UI-এর অভিযোজনের প্রয়োজন হয় না — Island সক্রিয় স্ক্রিন থেকে স্বাধীনভাবে কাজ করে। Live Activity-র রঙ সিস্টেম Color Assets-এর মাধ্যমে সিস্টেম থিমের (হালকা/গাঢ়) সাথে মিলে যাওয়া উচিত। SF Symbols কাস্টম আইকনের চেয়ে পছন্দনীয় — এগুলি যেকোনো Island মোডে সঠিকভাবে প্রদর্শিত হওয়ার নিশ্চয়তা দেয় এবং বিল্ট-ইন Dynamic Type সমর্থন রাখে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Dynamic Island শুধুমাত্র iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max এবং নতুন মডেলে iOS 16.1+ সহ উপলব্ধ। পুরানো iPhone-এ notch সহ Dynamic Island প্রদর্শিত হয় না — Live Activity লক স্ক্রিনে একটি সাধারণ ব্যানার হিসেবে দেখায়। ডেভেলপারের আলাদা কোড লেখার প্রয়োজন নেই: সিস্টেম নিজেই ডিভাইসের ক্ষমতা অনুযায়ী ইন্টারফেস অভিযোজিত করে।
Dynamic Island একসাথে দুটি অ্যাক্টিভিটি প্রদর্শন সমর্থন করে — সেগুলি ক্যামেরা কাটআউটের বাম এবং ডান দিকে অবস্থিত হয়। যদি শুধুমাত্র একটি অ্যাক্টিভিটি থাকে, এটি বাম দিক দখল করে এবং ডান দিক কমপ্যাক্ট অবস্থায় থাকে। যেকোনো পাশ ট্যাপ করলে Island প্রসারিত হয় এবং সংশ্লিষ্ট Activity-র কন্টেন্ট দেখায়।
Dynamic Island-এ সিস্টেম ইভেন্ট: ন্যূনতম কার্ড এবং কন্টাক্ট নাম সহ ইনকামিং কল, অ্যানিমেশন এবং ব্যাটারি চার্জ সহ AirPods সংযোগ, লক আইকন সহ Face ID, শতাংশ সহ ডিভাইস চার্জিং, মডেম মোড, ভলিউম পরিবর্তন, সাইলেন্ট মোড সক্রিয়করণ, স্থানান্তর অগ্রগতি সহ AirDrop এবং শাটার অ্যানিমেশন সহ স্ক্রিনশট।
Dynamic Island-এর আলাদা API-র প্রয়োজন নেই — এটি WidgetKit-এর সাথে ActivityKit-এর মাধ্যমে তৈরি Live Activities প্রদর্শন করে। অ্যাপ DynamicIsland কনফিগারেশন সহ একটি Activity নিবন্ধন করে, কমপ্যাক্ট, ন্যূনতম এবং বিস্তৃত SwiftUI Views নির্ধারণ করে। সিস্টেম এটি সমর্থিত ডিভাইসে Dynamic Island-এ স্বয়ংক্রিয়ভাবে দেখায়।
Dynamic Island তিনটি ভিজ্যুয়াল অবস্থায় সীমাবদ্ধ যার বিভিন্ন আকার রয়েছে: কমপ্যাক্ট 50pt পর্যন্ত, ন্যূনতম 22pt পর্যন্ত, বিস্তৃত 300pt পর্যন্ত। কমপ্যাক্ট মোডে ২০ অক্ষরের বেশি টেক্সট রাখার সুপারিশ করা হয় না। শুধুমাত্র সিস্টেম SwiftUI উপাদান উপলব্ধ — Text, Image, ProgressView, Gauge। কাস্টম ফন্ট এবং রঙ সিস্টেম প্যালেটে সীমাবদ্ধ।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন