Dynamic Island — isang interactive na lugar sa itaas na bahagi ng iPhone 14 Pro at mas bago, na pinagsasama ang hardware cutout ng camera sa mga software notification sa iisang elemento ng interface. Dynamic Island inaayos ang hugis at sukat ayon sa uri ng nilalaman: tawag, timer, musika, Live Activity, pagkonekta ng AirPods. Ang mga developer ay nakikipag-ugnayan sa pamamagitan ng Dynamic Island API batay sa ActivityKit at WidgetKit. Higit pa sa Dynamic Island HIG.
Mga Pangunahing Punto
Dynamic Island — isang elemento ng interface ng iPhone 14 Pro, 15 Pro at mas bago, na gumagamit ng lugar sa paligid ng front camera at Face ID sensors para magpakita ng mga notification at Live Activity. Hindi tulad ng lumang notch cutout na isang static na itim na elemento, ang Dynamic Island ay dinamikong nagbabago ng hugis at sukat: lumalawak para magpakita ng timer,umuurong para sa icon ng nakakonektang AirPods, nagiging parihaba para sa mga resulta ng sports.
Teknikal na implementasyon ng Dynamic Island ay batay sa hardware cutout (pill-shaped cutout) ng OLED screen at software processing ng mga pixel sa paligid nito. Pinapataas ng system ang refresh rate ng mga pixel hanggang 120 Hz sa lugar ng Island at gumagamit ng smoothing para sa maayos na transition sa pagitan ng nilalaman at itim na lugar ng camera. Hindi direktang pino-program ng developer ang Island — gumagawa siya ng nilalaman sa pamamagitan ng ActivityKit, at awtomatikong inilalagay ito ng system sa paligid ng cutout.
Pagdama ng gumagamit Ginagawang functional na elemento ng Dynamic Island ang isang hardware flaw. Ayon sa pananaliksik ng Apple, nakikita ng mga gumagamit ang Island bilang natural na bahagi ng screen pagkatapos ng ilang araw ng paggamit. Ang backlight at mga animasyon ay nakakaakit ng atensyon — halimbawa, ang pagdating ng notification ay naglilipat ng Island at nagpapakita ng nilalaman na may epekto ng paglawak sa 120 frames bawat segundo.
Dynamic Island sumusuporta ng tatlong mode ng pagpapakita ng nilalaman, na awtomatikong pinipili ng system batay sa uri at bilang ng mga aktibidad. Tinutukoy ng developer ang UI para sa bawat mode sa WidgetBundle, ngunit hindi pinamamahalaan kung aling mode ang aktibo sa kasalukuyan. Ang system ay maaari ring magpakita ng dalawang aktibidad nang sabay: isa sa kaliwa ng cutout, isa sa kanan.
| Mode | Sukat | Nilalaman | Halimbawa |
|---|---|---|---|
| Compact | ~50pt lapad | Icon + maikling teksto | Timer: icon ng orasan + «05:00» |
| Minimal | ~22pt bilog | Icon lang ng app | Notification ng screenshot |
| Extended | ~300pt x 80pt | Custom na SwiftUI View | Iskor ng sports na may mga logo |
Transition sa pagitan ng mga mode ay ginagawa gamit ang system animation na tumatagal ng 0.4–0.6 segundo na may ease-in-out curve. Kapag lumitaw ang isang bagong Activity, lumalawak ang Island mula compact patungong extended mode. Kapag natapos — umuurong pabalik. Maaaring pilitin ng gumagamit na i-collapse ang extended mode sa pamamagitan ng pag-swipe pakaliwa — lumilipat ang Island sa compact o minimal na mode. I-collapse din ng system ang extended mode pagkatapos ng 5 segundo ng kawalan ng aktibidad, kung walang inaasahang update.
Dalawang aktibidad — kung ang dalawang app ay may aktibong Live Activity, ipinapakita ng Dynamic Island ang mga ito sa magkabilang gilid ng cutout. Kaliwang bahagi — unang Activity na sinimulan, kanang bahagi — pangalawa. Kung isa lang ang aktibidad, nasa kaliwang bahagi ito, nananatiling walang laman ang kanan. Kapag pinindot ang alinmang bahagi, lumalawak ang Island at ipinapakita ang nilalaman ng Activity na iyon. Ang system mismo ang nagpapasya kung aling Activity ang bibigyan ng priyoridad kung may conflict.
Nilalaman ng Dynamic Island ay ginagawa eksklusibo sa pamamagitan ng Live Activity gamit ang ActivityKit framework. Tinutukoy ng developer ang apat na lugar sa code: compact kaliwa (compactLeading), compact kanan (compactTrailing), minimal (minimal) at extended (expanded). Bawat lugar ay isang SwiftUI View na tumatanggap ng kasalukuyang estado ng Activity sa pamamagitan ng context. Kung hindi tinukoy ang isang lugar, hindi ipinapakita ng Island ang Activity na ito sa kaukulang mode.
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")
}
}
}
Mga limitasyon ng SwiftUI sa Dynamic Island — mga available na component: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (sa pamamagitan lang ng Link), Gauge. Bawal: ScrollView, List, TabView, mga animasyon, gesture recognizers. Paleta ng kulay — System Colors lang (label, secondaryLabel, tint). Mga font — mga sukat ng system mula .caption hanggang .title3. Gumagana nang tama ang custom na font at SF Symbols.
Pagsubok ng Dynamic Island — nagbibigay ang Xcode ng simulator na may suporta sa Dynamic Island. Piliin ang iPhone 14 Pro o 15 Pro bilang target device. Sinusimulate ng ActivityKit ang iba't ibang mode ng Island: ang Dynamic Island Mode button sa Xcode Debug menu ay lumilipat sa pagitan ng compact, minimal, at extended. Para sa pagsubok ng maraming Activity nang sabay, gumamit ng mga scheme na may iba't ibang ActivityID o magpatakbo ng dalawang instance ng app.
Mga kaganapan sa system — mga tawag, AirPods, Face ID, pag-charge at iba pa — ay may priyoridad kaysa sa custom na Live Activity. Kapag naganap ang isang kaganapan sa system, pinapa-pause ng Island ang pagpapakita ng custom na nilalaman at ipinapakita ang nilalaman ng system. Pagkatapos ng kaganapan sa system, bumalik ang Island sa custom na nilalaman na may animasyon. Hindi maaaring kanselahin o baguhin ng developer ang mga kaganapan sa system — pinamamahalaan ang mga ito sa antas ng operating system ng iOS.
| Kaganapan sa system | Format ng pagpapakita | Priyoridad |
|---|---|---|
| Papasok na tawag | Minimal na card na may pangalan ng contact | Mataas |
| AirPods | Animasyon + charge ng baterya | Katamtaman |
| Face ID | Icon ng kandado | Katamtaman |
| Pag-charge | Icon ng kidlat + porsyento | Mababa |
| AirDrop | Progreso ng transfer | Katamtaman |
| Screenshot | Animasyon ng shutter | Mababa |
Papasok na tawag — pinakamahalagang kaganapan sa system. Ipinapakita ng Dynamic Island ang pangalan ng tumatawag sa kaliwa ng cutout at ang tagal/status sa kanan. Sa panahon ng aktibong tawag, hindi nagpapakita ang Island ng kahit anong custom na Live Activity. Maaaring palawakin ng gumagamit ang Island para buksan ang screen ng tawag o i-collapse ito para magpatuloy sa pagtatrabaho sa app na may aktibong tawag sa background.
Pagkonekta ng AirPods — kapag binuksan ang case malapit sa iPhone, ina-animate ng Dynamic Island ang pagkonekta at ipinapakita ang charge ng bawat earbud at case. Ang animasyon ay tumatagal ng 2–3 segundo, pagkatapos ay bumalik ang Island sa dating estado. Kung walang aktibong Live Activity ang gumagamit, nananatiling walang laman ang Island. Ang AirPods Pro 2 ay nagpapakita rin ng volume at noise cancellation mode kapag pinindot ang stem.
Pinakamahusay na kasanayan sa Dynamic Island mula sa Apple ay inirerekomenda para matiyak ang kalidad ng karanasan ng gumagamit. Ang compact mode ay dapat magpakita lamang ng pinakamahalagang impormasyon — isang icon at isang numero o maikling label. Ang extended mode — tanging pangunahing impormasyon walang labis na elemento. Iwasan ang paglalagay ng teksto sa compact mode kung lumalampas ito ng 20 character — pinuputol ng system ang teksto gamit ang ellipsis.
Push update para sa Dynamic Island — gamitin ang ActivityKit push para sa mga bihirang update (status ng order, resulta ng sports) at lokal na update para sa madalas na timer o stopwatch. Ang push notification ay dumadaan sa APNs at tumatagal ng 0.5–2 segundo bago lumitaw sa Island. StaleDate — itakda ang petsa ng pag-expire ng nilalaman: kung hindi dumating ang update sa tamang oras, nagpapakita ang system ng gray na background sa halip na nilalaman, na nagpapahiwatig sa gumagamit ng lumang data.
func updateDelivery(activity: Activity<DeliveryAttributes>) {
Task {
let newContent = ActivityContent(
state: DeliveryAttributes.ContentState(
status: .delivered,
estimatedMinutes: 0
),
staleDate: Date().addingTimeInterval(300)
)
await activity.update(newContent)
// Tinatapos ang Activity sa loob ng 2 segundo
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
Pagkonsumo ng enerhiya — ang Dynamic Island at Live Activities ay may minimal na epekto sa baterya dahil sa hardware optimization ng OLED screen. Ang mga itim na pixel sa paligid ng cutout ay naka-off, at ang nilalaman ay nire-render sa isang dedicated coprocessor. Average na pagkonsumo ng Live Activity — mas mababa sa 1% ng baterya bawat oras ng paggamit na may update bawat 5 minuto. Awtomatikong pinapa-pause ng system ang Island kapag mababa ang baterya (mas mababa sa 20%) o sa power saving mode.
Disenyo para sa Dynamic Island ay hindi nangangailangan ng adaptasyon ng pangunahing UI ng app — gumagana ang Island nang independyente sa aktibong screen. Ang mga kulay ng Live Activity ay dapat tumugma sa system theme (light/dark) sa pamamagitan ng system Color Assets. SF Symbols ay mas pinipili kaysa custom na icon — ginagarantiya nila ang tamang pagpapakita sa anumang mode ng Island at may built-in na suporta para sa Dynamic Type.
Mga Madalas Itanong
Ang Dynamic Island ay available lang sa iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max at mas bago na may iOS 16.1+. Sa mas lumang iPhone na may «bangs» hindi lumilitaw ang Dynamic Island — ang Live Activity ay nagpapakita bilang isang regular na banner sa lock screen. Hindi kailangang magsulat ng ibang code ang developer: inaayos ng system ang interface sa mga kakayahan ng device.
Sinusuportahan ng Dynamic Island ang pagpapakita ng dalawang aktibidad nang sabay — matatagpuan ang mga ito sa kaliwa at kanan ng camera cutout. Kung isa lang ang aktibidad, nasa kaliwang bahagi ito, ang kanang bahagi ay nananatili sa compact na estado. Kapag pinindot ang alinmang bahagi, lumalawak ang Island at ipinapakita ang nilalaman ng kaukulang Activity.
Mga kaganapan sa system sa Dynamic Island: papasok na tawag na may minimal na card at pangalan ng contact, pagkonekta ng AirPods na may animasyon at charge ng baterya, Face ID na may icon ng kandado, pag-charge ng device na may porsyento, mode ng modem, pagbabago ng volume, pag-activate ng Silent Mode, AirDrop na may progreso ng transfer, at screenshot na may animasyon ng shutter.
Ang Dynamic Island ay hindi nangangailangan ng hiwalay na API — nagpapakita ito ng Live Activity na ginawa sa pamamagitan ng ActivityKit kasama ng WidgetKit. Nirerehistro ng app ang Activity na may DynamicIsland configuration, tinutukoy ang compact, minimal, at extended na SwiftUI View. Awtomatikong ipinapakita ito ng system sa Dynamic Island sa mga suportadong device.
Ang Dynamic Island ay limitado sa tatlong visual na estado na may iba't ibang laki: compact hanggang 50pt, minimal hanggang 22pt, extended hanggang 300pt. Sa compact mode, hindi inirerekomenda na maglagay ng tekstong mas mahaba sa 20 character. Tanging mga system SwiftUI component ang available — Text, Image, ProgressView, Gauge. Ang custom na font at kulay ay limitado sa system palette.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din