Dynamic Island — egy interaktív terület az iPhone 14 Pro és az összes iPhone 15/16 felső részén, amely egyesíti az értesítéseket, háttértevékenységeket és rendszerjelzőket egyetlen dinamikus zónában. A hagyományos kivágással (notch) ellentétben a Dynamic Island alakját és méretét az aktuális kontextusnak megfelelően változtatja. Az Apple adatai szerint (WWDC 2024) a felhasználók átlagosan napi 12-szer lépnek kapcsolatba a Dynamic Islanddel — érintéssel, hosszú lenyomással és Live Activities segítségével az ActivityKit-en keresztül. Az iOS animációiról bővebben a Corner Radius cikkben olvashat.
Főbb pontok
Dynamic Island — egy interaktív terület az Apple szoftver-hardver megoldása alapján, amelyet 2022 szeptemberében mutattak be az iPhone 14 Pro-val együtt. Fizikailag egy tabletta alakú kivágás, amelyet OLED pixelek vesznek körül, amelyek dinamikusan változtatják a színüket és alakjukat. Az Apple a kamera és a Face ID hardver rekeszének kombinációját használja a körülötte lévő fekete területek szoftveres renderelésével, létrehozva egy «élő» sziget illúzióját.
A Dynamic Island fő célja a rendszerértesítések és az aktív tartalom közötti szakadék áthidalása. Ahelyett, hogy az értesítések a képernyő közepén (mint Androidon) vagy bannerként felül (mint régebbi iOS-eken) jelennének meg, a Dynamic Island közvetlenül a hardver zónába integrálja azokat. Ez csökkenti a figyelemelterelést és egységes tér érzetét kelti.
Az Apple adatai szerint (iOS 17 Adoption Statistics, 2024) a Dynamic Island az aktív iPhone-ok 38%-án elérhető. Az iPhone 15-től (2023) kezdve a sorozat összes modellje megkapta a Dynamic Islandet, beleértve az alapmodelleket is. Az iOS 18-ban az Apple kibővítette a Live Activities API-t, hozzáadva a visszaszámláló időzítők és sporteredmények támogatását közvetlenül a Dynamic Islanden.
Dynamic Island elérhető iPhone 14 Pro, iPhone 14 Pro Max, iPhone 15, iPhone 15 Plus, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 16, iPhone 16 Plus, iPhone 16 Pro, iPhone 16 Pro Max készülékeken. iPaden a Dynamic Island nem érhető el. A Dynamic Islandhez való fejlesztéshez Xcode 14.1+ és iOS 16.1+ szükséges.
A Dynamic Island három megjelenítési állapotot támogat: kompakt (compact), minimális (minimal) és kibővített (expanded). Az állapotok közötti átmenet UIKit-animációk és Core Animation segítségével animált. A rendszer maga kezeli a tevékenységek prioritását: ha több alkalmazás egyszerre próbál tartalmat megjeleníteni, az iOS az utolsó tevékenység kezdési idején alapuló sort használ.
| Állapot | Méret | Tartalom | Példa |
|---|---|---|---|
| Compact | 49×18 pt | Alkalmazás ikon + rendszer ikon | Időzítő, zene, hívás |
| Minimal | 66×18 pt-ig | Ikon + rövid szöveg | Navigációs utasítások, lépések |
| Expanded | 364×160 pt-ig | Teljes widget tartalommal | Sport eredmény, taxi állapot |
Kompakt állapot — a Dynamic Island alapértelmezett nézete, amikor egy háttérfeladat aktív. Lekerekített tablettaként jelenik meg az alkalmazás ikonjával balra és a rendszer ikonnal jobbra. Alapértelmezés szerint minden Live Activity kompakt állapotban indul.
Minimális állapot akkor fordul elő, ha két vagy több feladat egyszerre aktív. A Dynamic Island két külön elemre «oszlik» a kamera bal és jobb oldalán. A minimális állapot lehetővé teszi két független információforrás megjelenítését, például a taxi érkezési idejét és az aktuális számot.
Kibővített állapot a Dynamic Island hosszú lenyomásával aktiválódik. Ebben a módban egy teljes widget jelenik meg testreszabható tartalommal: címsorok, leírások, folyamatjelző sávok, gombok. A kibővített állapot támogatja a görgetést és az interaktív elemeket.
ActivityKit — egy Swift keretrendszer, amelyet az iOS 16.1-ben vezettek be, és lehetővé teszi az alkalmazások számára, hogy Live Activities-t tegyenek közzé a Dynamic Islanden és a Lock Screenen. Az ActivityKit az ActivityView és ActivityAttributes alapú architektúrát használja: az első a tartalom típusát, a második a változó adatokat határozza meg. A keretrendszer a WidgetKit-kel együttműködve működik, de a widgetekkel ellentétben a Live Activities valós időben frissülhet az alkalmazás megnyitása nélkül.
import ActivityKit
import SwiftUI
// Meghatározzuk a tevékenység attribútumait
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Elindítjuk a Live Activity-t
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Alekszej",
distanceToArrival: 3.5,
estimatedMinutes: 12
)
let attributes = DeliveryAttributes(orderNumber: "ORD-2024-8912")
let activity = try? Activity.request(
attributes: attributes,
contentState: initialState,
pushType: .token
)
}
A Live Activities az ActivityView-n keresztül frissül, amely SwiftUI tartalmat renderel a Dynamic Island számára. A rendszer maga határozza meg, melyik sablont használja (kompakt, minimális vagy kibővített), a Dynamic Island méretétől és a tevékenységek számától függően. A tartalom frissítéséhez hívja meg a activity.update(using: contentState) parancsot. A befejezéshez — activity.end(dismissalPolicy: .immediate).
Az ActivityKit támogatja a push frissítéseket az APNs (Apple Push Notification Service) segítségével. A Live Activity indításakor pushToken-t kérhet, és frissítéseket küldhet a szerverről anélkül, hogy el kellene indítania az alkalmazást az eszközön. A push frissítések az activity.pushToken és a Live Activity távoli indításához az Activity.pushToStartToken segítségével működnek.
// Live Activity frissítése Push segítségével
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Alekszej",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "A futár közel van",
body: "Alekszej 4 percen belül megérkezik",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration — egy további paraméter, amely értesítést jelenít meg a Dynamic Island felett fontos frissítésekkor (például «A futár megérkezett»). AlertConfiguration nélkül a tartalom csendesen frissül, ami a folyamatjelző sávokhoz és időzítőkhöz alkalmas.
A Notch (kivágás) — az iPhone X–13 hardver zónája, amely az előlapi kamerát, Face ID érzékelőt és hangszórót tartalmazza. A notch statikus: mérete és alakja nem változik, az értesítések pedig alatta jelennek meg szabványos bannerként. A Dynamic Island ezzel szemben a kivágás körüli pixeleket használja a tartalom megjelenítéséhez, a hardver elemet a felület részévé téve.
| Szempont | Dynamic Island | Notch |
|---|---|---|
| Interaktivitás | Támogatja az érintést, hosszú lenyomást, húzást | Nem interaktív |
| Tartalom adaptáció | Alakot vált a kontextusnak megfelelően | Statikus, tartalom a kivágás alatt |
| Live Activities | Beépített támogatás az ActivityKit-en keresztül | Nem — csak szokásos értesítések |
| Multitasking | Két egyidejű tevékenység (bal és jobb) | Csak egy tevékenység |
| Elérhetőség | iOS 16.1+, iPhone 14 Pro és újabb | iOS 11+, iPhone X–13 |
Az Apple Human Interface Guidelines (2025) szerint a Dynamic Island nem használható reklámokhoz vagy statikus tartalom folyamatos megjelenítéséhez. A Live Activities csak egyértelmű életciklusú háttérfeladatokhoz készült: időzítők, kiszállítás, sport, zene, navigáció. E szabályok megsértése az alkalmazás elutasításához vezet az App Store Review-ben.
A Dynamic Island szigorú életciklussal rendelkezik: a tevékenység az Activity.request() kéréssel kezdődik, áthalad az aktív/szüneteltetett/frissített állapotokon, és az activity.end() meghívásával ér véget. A rendszer kényszerítve befejezheti a tevékenységet memóriahiány esetén (például a kamera elindításakor). Ebben az esetben az alkalmazás értesítést kap az ActivityActivityState.finished segítségével.
A Dynamic Island gesztusait az ActivityView-n belüli SwiftUI tartalom dolgozza fel. Szabványos gesztusok: a kompakt állapot megérintése megnyitja az alkalmazást, a hosszú lenyomás megnyitja a kibővített állapotot, a lefelé húzás bezárja a kibővített állapotot. Egyéni gesztusok a SwiftUI módosítók (onTapGesture, onLongPressGesture) segítségével adhatók hozzá a tevékenység nézeten belül.
Amikor a rendszer befejez egy Live Activity-t (vagy a felhasználó elhúzással törli), az alkalmazásnak kezelnie kell a finished állapotot az erőforrások felszabadításához. Javasolt feliratkozni az Activity.activityStateUpdates-ra, és eltávolítani a helyi hivatkozásokat a tevékenységre a befejezés után.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activity aktív a Dynamic Islanden")
case .dismissed:
print("Activity elrejtve a felhasználó által")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activity befejezve a rendszer által")
cleanupResources()
@unknown default:
break
}
}
}
}
Apple ajánlása (WWDC 2024, Session 10146): ne használja a Dynamic Islandet olyan állapotok megjelenítésére, amelyek nem igényelnek felhasználói figyelmet. Minden Live Activity-nek világos kezdő és befejező triggerrel kell rendelkeznie. UI nélküli háttérfrissítésekhez használjon Background Tasks-t, ne Live Activities-t.
Gyakran Ismételt Kérdések
Dynamic Island elérhető iPhone 14 Pro, 14 Pro Max és az összes iPhone 15 és iPhone 16 modellen (beleértve az alap verziókat is). A fejlesztéshez iOS 16.1+ és Xcode 14.1 szükséges. Régebbi modelleken (iPhone X–13) a statikus notch kivágás használatos, amely nem támogatja a Live Activities-t.
Dynamic Island integrálja az értesítést a képernyő hardver zónájába anélkül, hogy eltakarná a tartalmat. A szokásos értesítés bannerként jelenik meg felül, és néhány másodperc múlva eltűnik. A Dynamic Islanden lévő Live Activities órákig aktív maradhat, és valós időben frissülhet (kiszállítás állapota, időzítő, zene).
Használjon push frissítéseket az APNs segítségével. A Live Activity indításakor hívja meg az activity.pushToken-t, és küldje el a tokent a szerverének. A szerver egy frissítési kérést küld az APNs-en keresztül az új ContentState-tel. Alternatíva — helyi frissítés az activity.update(using:) segítségével magából az alkalmazásból.
Az iOS automatikusan két szegmensre osztja a Dynamic Islandet, ha két aktív Live Activity van. Minden tevékenység minimális állapotban jelenik meg a kamera bal és jobb oldalán. Az egyik szegmens hosszú lenyomásával csak annak az alkalmazásnak a kibővített állapota nyílik meg.
Ellenőrizze: (1) az alkalmazás rendelkezik NSSupportsLiveActivities = YES értékkel az Info.plist-ben, (2) az ActivityAttributes és ContentState implementálja a Codable és Hashable protokollokat, (3) iOS verzió 16.1+, (4) a készülék támogatja a Dynamic Islandet. Szimulátorhoz használjon iPhone 14 Pro vagy újabbat az Xcode-ban.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is