Dynamic Island — iPhone 14 Pro və daha yeni modellərin yuxarı hissəsində yerləşən, kamera çıxıntısını proqram bildirişləri ilə vahid interfeys elementində birləşdirən interaktiv sahədir. Dynamic Island forma və ölçüsünü məzmun növünə uyğunlaşdırır: zəng, taymer, musiqi, Live Activity, AirPods qoşulması. Tərtibatçılar ActivityKit və WidgetKit əsasında Dynamic Island API vasitəsilə qarşılıqlı əlaqə qururlar. Ətraflı — Dynamic Island HIG.
Əsas məqamlar
Dynamic Island — iPhone 14 Pro, 15 Pro və daha yeni modellərin interfeys elementi olub, ön kamera və Face ID sensorları ətrafındakı sahəni bildirişlər və Live Activity göstərmək üçün istifadə edir. Statik qara element olan köhnə notch çıxıntısından fərqli olaraq, Dynamic Island dinamik olaraq forma və ölçüsünü dəyişir: taymer göstərmək üçün genişlənir, qoşulmuş AirPods ikonası üçün kiçilir, idman nəticələri üçün düzbucaqlıya çevrilir.
Texniki reallaşdırma Dynamic Island OLED ekranın avadanlıq çıxıntısına (pill-shaped cutout) və onun ətrafındakı piksellərin proqram emalına əsaslanır. Sistem Island sahəsində piksel yeniləmə tezliyini 120 Hz-ə qədər artırır və məzmunla kamera qaralığı arasında hamar keçid üçün yumşaldıcı tətbiq edir. Tərtibatçı Island-ı birbaşa proqramlaşdırmır — o, ActivityKit vasitəsilə məzmun yaradır, sistem isə onu avtomatik olaraq çıxıntının ətrafına yerləşdirir.
İstifadəçi qavrayışı Dynamic Island avadanlıq qüsurunu funksional elementə çevirir. Apple tədqiqatlarına görə, istifadəçilər bir neçə gün istifadədən sonra Island-ı ekranın təbii hissəsi kimi qəbul edirlər. İşıqlandırma və animasiyalar diqqəti cəlb edir — məsələn, bildiriş gəldikdə Island sürüşür və saniyədə 120 kadr sürətində genişlənmə effekti ilə məzmun göstərir.
Dynamic Island dəstəkləyir üç məzmun göstərmə rejimini, sistemi fəaliyyət növü və sayı əsasında avtomatik seçir. Tərtibatçı WidgetBundle-da hər rejim üçün UI təyin edir, lakin hazırda hansı rejimin aktiv olduğunu idarə etmir. Sistem eyni anda iki fəaliyyəti də göstərə bilər: biri çıxıntının solunda, digəri sağında.
| Rejim | Ölçü | Məzmun | Nümunə |
|---|---|---|---|
| Kompakt | ~50pt en | İkon + qısa mətn | Taymer: saat ikonu + «05:00» |
| Minimal | ~22pt dairəvi | Yalnız proqram ikonu | Ekran görüntüsü bildirişi |
| Genişləndirilmiş | ~300pt x 80pt | Fərdi SwiftUI View | Loqolarla idman hesabı |
Rejimlər arasında keçid ease-in-out əyrisi ilə 0.4–0.6 saniyə müddətində sistem animasiyası ilə həyata keçirilir. Yeni Activity görünəndə Island kompaktdan genişləndirilmiş rejimə keçir. Başa çatdıqda — geri kiçilir. İstifadəçi genişləndirilmiş rejimi sola sürüşdürərək məcburən yığa bilər — Island kompakt və ya minimal rejimə keçir. Sistem həmçinin 5 saniyə hərəkətsizlikdən sonra genişləndirilmiş rejimi yığır, əgər yeniləmə gözlənilmirsə.
İki fəaliyyət — iki proqramın aktiv Live Activity-si varsa, Dynamic Island onları çıxıntının iki tərəfində göstərir. Sol tərəf — ilk başladılan Activity, sağ tərəf — ikinci. Fəaliyyət təkdirsə, sol tərəfi tutur, sağ tərəf boş qalır. Hər hansı tərəfə basdıqda Island genişlənir və həmin Activity-nin məzmununu göstərir. Sistem münaqişə zamanı hansı Activity-yə üstünlük veriləcəyini özü qərar verir.
Dynamic Island məzmunu yalnız ActivityKit framework-u ilə Live Activity vasitəsilə yaradılır. Tərtibatçı kodda dörd sahə təyin edir: kompakt sol (compactLeading), kompakt sağ (compactTrailing), minimal (minimal) və genişləndirilmiş (expanded). Hər sahə context vasitəsilə Activity-nin cari vəziyyətini alan SwiftUI View-dir. Sahə təyin edilməyibsə, Island bu Activity-ni müvafiq rejimdə göstərmir.
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 məhdudiyyətləri Dynamic Island-da — mövcud komponentlər: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (yalnız Link vasitəsilə), Gauge. Qadağandır: ScrollView, List, TabView, animasiyalar, gesture recognizers. Rəng palitrası — yalnız System Colors (label, secondaryLabel, tint). Şriftlər — .caption-dan .title3-ə qədər sistem ölçüləri. Fərdi şriftlər və SF Symbols düzgün işləyir.
Dynamic Island-ı sınamaq — Xcode Dynamic Island dəstəyi olan simulyator təqdim edir. Hədəf qurğu olaraq iPhone 14 Pro və ya 15 Pro seçin. ActivityKit Island-ın müxtəlif rejimlərini simulyasiya edir: Xcode Debug menyusunda Dynamic Island Mode düyməsi kompakt, minimal və genişləndirilmiş arasında keçid edir. Eyni anda bir neçə Activity-ni sınamaq üçün müxtəlif ActivityID-li sxemlərdən istifadə edin və ya proqramın iki nüsxəsini işə salın.
Sistem hadisələri — zənglər, AirPods, Face ID, şarj və digərləri — fərdi Live Activity-lərdən üstünlük təşkil edir. Sistem hadisəsi baş verdikdə Island fərdi məzmunu dayandırır və sistem məzmununu göstərir. Sistem hadisəsi başa çatdıqdan sonra Island animasiya ilə fərdi məzmununa qayıdır. Tərtibatçı sistem hadisələrini ləğv edə və ya dəyişdirə bilməz — onlar iOS əməliyyat sistemi səviyyəsində idarə olunur.
| Sistem hadisəsi | Göstərmə formatı | Prioritet |
|---|---|---|
| Daxil olan zəng | Əlaqə adı ilə minimal kart | Yüksək |
| AirPods | Animasiya + batareya doldurulması | Orta |
| Face ID | Qıfıl ikonu | Orta |
| Şarj | İldırım ikonu + faiz | Aşağı |
| AirDrop | Transferin gedişatı | Orta |
| Ekran görüntüsü | Çekim animasiyası | Aşağı |
Daxil olan zəng — ən vacib sistem hadisəsi. Dynamic Island çıxıntının solunda zəng edənin adını, sağında isə müddət/status göstərir. Aktiv zəng zamanı Island heç bir fərdi Live Activity göstərmir. İstifadəçi Island-ı genişləndirib zəng ekranını aça və ya fonda aktiv zənglə proqramda işə davam etmək üçün yığa bilər.
AirPods qoşulması — iPhone yanında qutu açıldıqda Dynamic Island qoşulmanı animasiya edir və hər qulaqlığın və qutunun doldurulmasını göstərir. Animasiya 2–3 saniyə davam edir, sonra Island əvvəlki vəziyyətinə qayıdır. İstifadəçinin aktiv Live Activity-si yox idisə, Island boş qalır. AirPods Pro 2 həmçinin gövdəyə basdıqda səs səviyyəsi və səs-küyün azaldılması rejimini göstərir.
Dynamic Island üçün ən yaxşı təcrübələr Apple tərəfindən keyfiyyətli istifadəçi təcrübəsini təmin etmək üçün tövsiyə olunur. Kompakt rejim yalnız ən vacib məlumatı göstərməlidir — ikon və bir rəqəm və ya qısa etiket. Genişləndirilmiş rejim — yalnız lazımsız elementlər olmadan əsas məlumat. 20 simvoldan çox olduqda kompakt rejimdə mətn yerləşdirməkdən çəkinin — sistem mətni qeyri-müəyyənliklə kəsir.
Dynamic Island üçün Push yeniləmələri — nadir yeniləmələr üçün (sifariş statusu, idman nəticələri) ActivityKit push-dan, tez-tez taymerlər və ya saniyəölçənlər üçün lokal yeniləmələrdən istifadə edin. Push bildirişləri APNs-dən keçir və Island-da göstərilməsi 0.5–2 saniyə çəkir. StaleDate — məzmunun köhnəlmə tarixini təyin edin: yeniləmə vaxtında gəlməzsə, sistem məzmun əvəzinə boz fon göstərir, istifadəçiyə məlumatın köhnə olduğunu bildirir.
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-ni 2 saniyə sonra bitiririk
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
Enerji istehlakı — Dynamic Island və Live Activities OLED ekranın avadanlıq optimallaşdırması sayəsində batareyaya minimal təsir göstərir. Çıxıntı ətrafındakı qara piksellər söndürülür və məzmun xüsusi koprosessorda render edilir. Live Activity-nin orta istehlakı — hər 5 dəqiqədən bir yeniləmə ilə bir saatlıq istifadə üçün batareyanın 1%-dən azdır. Sistem aşağı batareya səviyyəsində (20%-dən aşağı) və ya enerjiyə qənaət rejimində Island-ı avtomatik dayandırır.
Dynamic Island üçün dizayn əsas proqram UI-nin uyğunlaşdırılmasını tələb etmir — Island aktiv ekrandan asılı olmayaraq işləyir. Live Activity rəngləri sistem Color Assets vasitəsilə sistem mövzusuna (açıq/qaranlıq) uyğun olmalıdır. SF Symbols fərdi ikonlardan üstündür — onlar Island-ın istənilən rejimində düzgün göstərilməyə zəmanət verir və Dynamic Type üçün daxili dəstəyə malikdir.
Tez-tez verilən suallar
Dynamic Island yalnız iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max və daha yeni modellərdə iOS 16.1+ ilə mövcuddur. «Çəpərli» köhnə iPhone-larda Dynamic Island göstərilmir — Live Activity bloklama ekranında adi banner kimi görünür. Tərtibatçı fərqli kod yazmalı deyil: sistem interfeysi qurğunun imkanlarına uyğunlaşdırır.
Dynamic Island eyni anda iki fəaliyyətin göstərilməsini dəstəkləyir — onlar kamera çıxıntısının solunda və sağında yerləşir. Fəaliyyət təkdirsə, sol tərəfi tutur, sağ tərəf isə kompakt vəziyyətdə qalır. Hər hansı tərəfə basdıqda Island genişlənir və müvafiq Activity-nin məzmununu göstərir.
Dynamic Island-da sistem hadisələri: daxil olan zəng minimal kart və əlaqə adı ilə, AirPods qoşulması animasiya və batareya doldurulması ilə, Face ID qıfıl ikonu ilə, cihazın faizlə şarjı, modem rejimi, səs səviyyəsinin dəyişməsi, Silent Mode-un aktivləşdirilməsi, AirDrop transfer gedişatı və çekim animasiyası ilə ekran görüntüsü.
Dynamic Island ayrıca API tələb etmir — o, ActivityKit və WidgetKit ilə yaradılan Live Activity-ni göstərir. Tətbiq DynamicIsland konfiqurasiyası ilə Activity qeydiyyatdan keçirir, kompakt, minimal və genişləndirilmiş SwiftUI View təyin edir. Sistem onu dəstəklənən qurğularda Dynamic Island-da avtomatik göstərir.
Dynamic Island müxtəlif ölçülərdə üç vizual vəziyyətlə məhdudlaşır: kompakt 50pt-ə qədər, minimal 22pt-ə qədər, genişləndirilmiş 300pt-ə qədər. Kompakt rejimdə 20 simvoldan uzun mətn yerləşdirmək tövsiyə edilmir. Yalnız sistem SwiftUI komponentləri mövcuddur — Text, Image, ProgressView, Gauge. Fərdi şriftlər və rənglər sistem palitrası ilə məhdudlaşır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun