Dynamic Island — egy interaktív terület az iPhone 14 Pro és újabb készülékek felső részén, amely a kamera hardveres kivágását egyesíti a szoftveres értesítésekkel egyetlen interfész elemben. A Dynamic Island alakját és méretét a tartalom típusához igazítja: hívás, időzítő, zene, Live Activity, AirPods csatlakoztatás. A fejlesztők a Dynamic Island API-n keresztül kommunikálnak, amely ActivityKit-en és WidgetKit-en alapul. Bővebben a Dynamic Island HIG oldalon.
Főbb pontok
Dynamic Island — egy interfész elem az iPhone 14 Pro, 15 Pro és újabb készülékeken, amely az előlapi kamera és Face ID érzékelők körüli területet használja értesítések és Live Activity megjelenítésére. Ellentétben a régi notch kivágással, amely egy statikus fekete elem volt, a Dynamic Island dinamikusan változtatja alakját és méretét: kitágul az időzítő megjelenítéséhez, összehúzódik a csatlakoztatott AirPods ikonjához, téglalappá alakul sporteredményekhez.
Technikai megvalósítás A Dynamic Island az OLED képernyő hardveres kivágásán (pill-shaped cutout) és a körülötte lévő pixelek szoftveres feldolgozásán alapul. A rendszer 120 Hz-re növeli a pixelek frissítési gyakoriságát az Island területén, és simítást használ a zökkenőmentes átmenethez a tartalom és a kamera fekete területe között. A fejlesztő nem programozza közvetlenül az Island-et — tartalmat hoz létre az ActivityKit-en keresztül, a rendszer pedig automatikusan helyezi el a kivágás körül.
Felhasználói észlelés A Dynamic Island egy hardveres hibát funkcionális elemmé változtat. Az Apple kutatásai szerint a felhasználók néhány nap használat után az Island-et a képernyő természetes részeként érzékelik. A háttérvilágítás és az animációk felkeltik a figyelmet — például egy értesítés érkezése elmozdítja az Island-et, és 120 képkocka/másodperc sebességgel tágulási effektussal jeleníti meg a tartalmat.
Dynamic Island támogat három tartalommegjelenítési módot, amelyeket a rendszer automatikusan választ ki a tevékenységek típusa és száma alapján. A fejlesztő minden módhoz UI-t határoz meg a WidgetBundle-ben, de nem kezeli, hogy melyik mód az aktuálisan aktív. A rendszer két tevékenységet is megjeleníthet egyszerre: egyet a kivágástól balra, egyet jobbra.
| Mód | Méret | Tartalom | Példa |
|---|---|---|---|
| Kompakt | ~50pt szélesség | Ikon + rövid szöveg | Időzítő: óra ikon + «05:00» |
| Minimális | ~22pt kör | Csak alkalmazás ikon | Képernyőkép értesítés |
| Bővített | ~300pt x 80pt | Egyéni SwiftUI View | Sport eredmény logókkal |
Átmenet a módok között 0.4–0.6 másodpercig tartó rendszeranimációval történik ease-in-out görbével. Amikor egy új Activity megjelenik, az Island a kompakt módból a bővítettbe tágul. Befejezéskor — visszahúzódik. A felhasználó balra húzással kényszerítheti a bővített mód összecsukását — az Island kompakt vagy minimális módba vált. A rendszer 5 másodperc inaktivitás után is összecsukja a bővített módot, ha nem várható frissítés.
Két tevékenység — ha két alkalmazásnak van aktív Live Activity-je, a Dynamic Island a kivágás mindkét oldalán megjeleníti azokat. Bal oldal — az első elindított Activity, jobb oldal — a második. Ha csak egy tevékenység van, az a bal oldalt foglalja el, a jobb oldal üres marad. Bármelyik oldal megnyomására az Island kitágul és megjeleníti az adott Activity tartalmát. A rendszer maga dönti el, melyik Activity kap prioritást konfliktus esetén.
Dynamic Island tartalom kizárólag Live Activity-n keresztül jön létre az ActivityKit keretrendszerrel. A fejlesztő négy területet határoz meg a kódban: kompakt bal (compactLeading), kompakt jobb (compactTrailing), minimális (minimal) és bővített (expanded). Minden terület egy SwiftUI View, amely a context-en keresztül kapja meg az Activity aktuális állapotát. Ha egy terület nincs meghatározva, az Island nem jeleníti meg ezt az Activity-t a megfelelő módban.
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")
}
}
}
SwiftUI korlátozások Dynamic Island-ben — elérhető komponensek: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (csak Link-en keresztül), Gauge. Tiltott: ScrollView, List, TabView, animációk, gesture recognizers. Színpaletta — csak System Colors (label, secondaryLabel, tint). Betűtípusok — rendszerméretek .caption-től .title3-ig. Az egyéni betűtípusok és SF Symbols helyesen működnek.
Dynamic Island tesztelése — az Xcode Dynamic Island támogatással rendelkező szimulátort biztosít. Válassza ki az iPhone 14 Pro vagy 15 Pro készüléket célként. Az ActivityKit szimulálja az Island különböző módjait: a Dynamic Island Mode gomb az Xcode Debug menüben vált a kompakt, minimális és bővített között. Több Activity egyidejű teszteléséhez használjon különböző ActivityID-jű sémákat, vagy indítson el két alkalmazáspéldányt.
Rendszeresemények — hívások, AirPods, Face ID, töltés és mások — elsőbbséget élveznek az egyéni Live Activity-kkel szemben. Amikor egy rendszeresemény történik, az Island szünetelteti az egyéni tartalom megjelenítését és rendszertartalmat mutat. A rendszeresemény befejezése után az Island animációval tér vissza az egyéni tartalomhoz. A fejlesztő nem törölheti vagy módosíthatja a rendszereseményeket — azok az iOS operációs rendszer szintjén kerülnek kezelésre.
| Rendszeresemény | Megjelenítési formátum | Prioritás |
|---|---|---|
| Bejövő hívás | Minimális kártya a kapcsolat nevével | Magas |
| AirPods | Animáció + akkumulátor töltöttség | Közepes |
| Face ID | Lakat ikon | Közepes |
| Töltés | Villám ikon + százalék | Alacsony |
| AirDrop | Átvitel előrehaladása | Közepes |
| Képernyőkép | Zár animáció | Alacsony |
Bejövő hívás — a legfontosabb rendszeresemény. A Dynamic Island a hívó nevét a kivágástól balra, az időtartamot/állapotot jobbra jeleníti meg. Aktív hívás alatt az Island nem jelenít meg egyéni Live Activity-t. A felhasználó kitágíthatja az Island-et a hívás képernyő megnyitásához, vagy összecsukhatja, hogy folytassa a munkát az alkalmazásban az aktív háttérhívással.
AirPods csatlakoztatása — a tok iPhone mellé nyitásakor a Dynamic Island animálja a csatlakozást és megjeleníti az egyes fülhallgatók és a tok töltöttségét. Az animáció 2–3 másodpercig tart, majd az Island visszatér az előző állapotba. Ha a felhasználónak nem volt aktív Live Activity-je, az Island üres marad. Az AirPods Pro 2 a szár megnyomásakor a hangerőt és a zajszűrési módot is megjeleníti.
Dynamic Island legjobb gyakorlatok az Apple által ajánlva a minőségi felhasználói élmény biztosításához. A kompakt mód csak a legfontosabb információkat jelenítse meg — egy ikont és egy számot vagy rövid címkét. A bővített mód — csak a kulcsfontosságú információkat felesleges elemek nélkül. Kerülje a szöveg elhelyezését kompakt módban, ha az meghaladja a 20 karaktert — a rendszer három ponttal vágja le a szöveget.
Push frissítések Dynamic Island-hez — ritka frissítésekhez (rendelés állapota, sport eredmények) használjon ActivityKit push-t, gyakori időzítőkhöz vagy stopperórákhoz pedig helyi frissítéseket. A push értesítések az APNs-en haladnak át, és 0.5–2 másodpercet vesz igénybe megjelenésük az Island-ben. StaleDate — állítson be elévülési dátumot a tartalomhoz: ha a frissítés nem érkezik meg időben, a rendszer szürke hátteret jelenít meg tartalom helyett, jelezve a felhasználónak az elavult adatokat.
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 befejezése 2 másodperc múlva
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
Energiafogyasztás — a Dynamic Island és a Live Activities minimális hatással van az akkumulátorra az OLED képernyő hardveres optimalizálásának köszönhetően. A kivágás körüli fekete pixelek ki vannak kapcsolva, a tartalom pedig egy dedikált koprocesszoron renderelődik. A Live Activity átlagos fogyasztása — kevesebb, mint 1% akkumulátor óránként, 5 percenkénti frissítés mellett. A rendszer automatikusan szünetelteti az Island-et alacsony akkumulátorszint (20% alatt) vagy energiatakarékos mód esetén.
Design Dynamic Island-hez nem igényli a fő alkalmazás UI-jának adaptálását — az Island az aktív képernyőtől függetlenül működik. A Live Activity színeinek meg kell felelniük a rendszer témájának (világos/sötét) a rendszer Color Assets-en keresztül. SF Symbols előnyösebbek az egyéni ikonokkal szemben — garantáltan helyesen jelennek meg az Island bármely módjában, és beépített támogatással rendelkeznek a Dynamic Type-hoz.
Gyakran Ismételt Kérdések
A Dynamic Island csak iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max és újabb készülékeken érhető el iOS 16.1+ rendszerrel. A régebbi, «hullámos» iPhone-okon a Dynamic Island nem jelenik meg — a Live Activity normál bannerként jelenik meg a zárolási képernyőn. A fejlesztőnek nem kell más kódot írnia: a rendszer maga igazítja az interfészt a készülék képességeihez.
A Dynamic Island támogatja két tevékenység egyidejű megjelenítését — ezek a kamera kivágástól balra és jobbra helyezkednek el. Ha csak egy tevékenység van, az a bal oldalt foglalja el, a jobb oldal kompakt állapotban marad. Bármelyik oldal megnyomására az Island kitágul és megjeleníti a megfelelő Activity tartalmát.
Rendszeresemények a Dynamic Island-ben: bejövő hívás minimális kártyával és kapcsolat nevével, AirPods csatlakoztatás animációval és akkumulátor töltöttséggel, Face ID lakat ikonnal, eszköz töltés százalékkal, modem mód, hangerő változás, Silent Mode bekapcsolása, AirDrop átviteli előrehaladással és képernyőkép zár animációval.
A Dynamic Island nem igényel külön API-t — a WidgetKit-tel együtt az ActivityKit-en keresztül létrehozott Live Activity-t jeleníti meg. Az alkalmazás regisztrál egy Activity-t DynamicIsland konfigurációval, meghatározza a kompakt, minimális és bővített SwiftUI View-t. A rendszer automatikusan megjeleníti azt Dynamic Island-ben a támogatott eszközökön.
A Dynamic Island három vizuális állapotra korlátozódik különböző méretekkel: kompakt 50pt-ig, minimális 22pt-ig, bővített 300pt-ig. Kompakt módban nem ajánlott 20 karakternél hosszabb szöveg elhelyezése. Csak rendszer SwiftUI komponensek érhetők el — Text, Image, ProgressView, Gauge. Az egyéni betűtípusok és színek a rendszerpalettára korlátozódnak.
Összefoglaló
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