Dynamic Island — iPhone 14 Pro və bütün iPhone 15/16 modellərinin yuxarı hissəsində yerləşən, bildirişləri, fon aktivliklərini və sistem göstəricilərini vahid dinamik zonada birləşdirən interaktiv sahədir. Ənənəvi kəsikdən (notch) fərqli olaraq, Dynamic Island cari kontekstdən asılı olaraq forma və ölçüsünü dəyişir. Apple (WWDC 2024) məlumatlarına görə, istifadəçilər Dynamic Island ilə orta hesabla gündə 12 dəfə — toxunuş, uzun basma və ActivityKit ilə Live Activities vasitəsilə qarşılıqlı əlaqədə olurlar. iOS-dakı animasiyalar haqqında ətraflı Corner Radius məqaləsində oxuyun.
Əsas məqamlar
Dynamic Island — Apple-ın proqram-təminat həlli əsasında interaktiv sahə olub, 2022-ci ilin sentyabrında iPhone 14 Pro ilə birlikdə təqdim edilmişdir. Fiziki olaraq bu, həb formasında kəsikdir, OLED pikselləri ilə əhatə olunmuşdur və dinamik olaraq rəng və formasını dəyişir. Apple kamera və Face ID üçün aparat bölməsinin ətrafında qara sahələrin proqram renderi kombinasiyasından istifadə edərək «canlı» ada illüziyası yaradır.
Dynamic Island-ın əsas məqsədi sistem bildirişləri ilə aktiv məzmun arasındakı boşluğu aradan qaldırmaqdır. Bildirişlərin ekranın mərkəzində (Android-də olduğu kimi) və ya yuxarıda banner şəklində (köhnə iOS versiyalarında olduğu kimi) görünməsi əvəzinə, Dynamic Island onları birbaşa aparat zonasına inteqrasiya edir. Bu, diqqətin yayınmasını azaldır və vahid məkan hissi yaradır.
Apple məlumatlarına görə (iOS 17 Adoption Statistics, 2024), Dynamic Island aktiv iPhone-ların 38%-də mövcuddur. iPhone 15-dən (2023) başlayaraq, bütün model seriyaları Dynamic Island aldı, o cümlədən əsas modellər. iOS 18-də Apple Live Activities API-ni genişləndirərək, birbaşa Dynamic Island-da geri sayım taymerləri və idman nəticələri dəstəyini əlavə etdi.
Dynamic Island 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 modellərində mövcuddur. iPad-də Dynamic Island yoxdur. Dynamic Island üçün tərtibat Xcode 14.1+ və iOS 16.1+ tələb edir.
Dynamic Island üç göstərmə vəziyyətini dəstəkləyir: yığcam (compact), minimal (minimal) və genişləndirilmiş (expanded). Vəziyyətlər arasında keçid UIKit-animasiyaları və Core Animation istifadə edilərək animasiya olunur. Sistem özü aktivliklərin prioritetini idarə edir: bir neçə tətbiq eyni anda məzmun göstərməyə çalışarsa, iOS son aktivliyin başlama vaxtına əsaslanan növbədən istifadə edir.
| Vəziyyət | Ölçü | Məzmun | Nümunə |
|---|---|---|---|
| Compact | 49×18 pt | Tətbiq ikonu + sistem ikonu | Taymer, musiqi, zəng |
| Minimal | 66×18 pt-ə qədər | İkon + qısa mətn | Naviqasiya istiqamətləri, addımlar |
| Expanded | 364×160 pt-ə qədər | Məzmunlu tam vidjet | İdman hesabı, taksi statusu |
Yığcam vəziyyət — bir fon tapşırığı aktiv olduqda Dynamic Island-ın standart görünüşü. Solda tətbiq ikonu və sağda sistem ikonu olan yuvarlaqlaşdırılmış həb kimi göstərilir. Bütün Live Activities standart olaraq yığcam vəziyyətdə başlayır.
Minimal vəziyyət iki və ya daha çox tapşırıq eyni anda aktiv olduqda yaranır. Dynamic Island kameranın solunda və sağında iki ayrı elementə «bölünür». Minimal vəziyyət iki müstəqil məlumat mənbəyini göstərməyə imkan verir, məsələn taksi gəliş vaxtı və cari treki.
Genişləndirilmiş vəziyyət Dynamic Island-da uzun basma ilə aktivləşir. Bu rejimdə konfiqurasiya oluna bilən məzmunu olan tam vidjet göstərilir: başlıqlar, təsvirlər, gedişat çubuqları, düymələr. Genişləndirilmiş vəziyyət sürüşdürmə və interaktiv elementləri dəstəkləyir.
ActivityKit — iOS 16.1-də təqdim edilmiş Swift framework olub, tətbiqlərə Dynamic Island və Lock Screen-də Live Activities dərc etməyə imkan verir. ActivityKit ActivityView və ActivityAttributes-ə əsaslanan arxitekturadan istifadə edir: birincisi məzmun tipini, ikincisi dəyişən məlumatları müəyyən edir. Framework WidgetKit ilə əlaqədə işləyir, lakin vidjetlərdən fərqli olaraq, Live Activities tətbiqi açmadan real vaxtda yenilənə bilər.
import ActivityKit
import SwiftUI
// Aktivlik atributlarını təyin edirik
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Live Activity-ni işə salırıq
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Aleksey",
distanceToArrival: 3.5,
estimatedMinutes: 12
)
let attributes = DeliveryAttributes(orderNumber: "ORD-2024-8912")
let activity = try? Activity.request(
attributes: attributes,
contentState: initialState,
pushType: .token
)
}
Live Activities Dynamic Island üçün SwiftUI-məzmununu render edən ActivityView vasitəsilə yenilənir. Sistem özü Dynamic Island-ın ölçüsü və aktivliklərin sayından asılı olaraq hansı şablondan istifadə edəcəyini müəyyən edir (yığcam, minimal və ya genişləndirilmiş). Məzmunu yeniləmək üçün activity.update(using: contentState) çağırın. Bitirmək üçün — activity.end(dismissalPolicy: .immediate).
ActivityKit push yeniləmələrini APNs (Apple Push Notification Service) vasitəsilə dəstəkləyir. Live Activity başladarkən pushToken tələb edə və cihazda tətbiqi işə salmadan serverdən yeniləmələr göndərə bilərsiniz. Push yeniləmələri activity.pushToken və Live Activity-nin uzaqdan başladılması üçün Activity.pushToStartToken vasitəsilə işləyir.
// Live Activity-nin Push vasitəsilə yenilənməsi
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Aleksey",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Kuryer yaxınlaşır",
body: "Aleksey 4 dəqiqəyə gələcək",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration — əlavə parametrdir və vacib yeniləmələrdə (məsələn, «Kuryer gəldi») Dynamic Island üzərində bildiriş göstərir. AlertConfiguration olmadan məzmun səssizcə yenilənir, bu da gedişat çubuqları və taymerlər üçün uyğundur.
Notch (kəsik) — ön kamera, Face ID sensoru və dinamiki ehtiva edən iPhone X–13-ün aparat zonasıdır. Notch statikdir: ölçüsü və forması dəyişmir, bildirişlər isə onun altında standart bannerlər şəklində göstərilir. Dynamic Island, əksinə, kəsik ətrafındakı piksellərdən məzmun göstərmək üçün istifadə edir, aparat elementini interfeysin bir hissəsinə çevirir.
| Meyar | Dynamic Island | Notch |
|---|---|---|
| İnteraktivlik | Uzun basma, toxunma, sürüşdürməni dəstəkləyir | İnteraktiv deyil |
| Məzmun adaptasiyası | Formasını kontekstə görə dəyişir | Statikdir, məzmun kəsik altında |
| Live Activities | ActivityKit vasitəsilə daxili dəstək | Yox — yalnız adi bildirişlər |
| Multi-tasking | İki eynivaxtlı aktivlik (sol və sağ) | Yalnız bir aktivlik |
| Mövcudluq | iOS 16.1+, iPhone 14 Pro və daha yeniləri | iOS 11+, iPhone X–13 |
Apple Human Interface Guidelines-ə (2025) görə, Dynamic Island reklam və ya statik məzmunun daimi göstərilməsi üçün istifadə edilməməlidir. Live Activities yalnız aydın həyat dövrü olan fon tapşırıqları üçün nəzərdə tutulub: taymerlər, çatdırılma, idman, musiqi, naviqasiya. Bu qaydaların pozulması tətbiqin App Store Review-də rədd edilməsinə səbəb olur.
Dynamic Island ciddi həyat dövrünə malikdir: aktivlik Activity.request() vasitəsilə sorğu ilə başlayır, aktiv/dayandırılmış/yenilənmiş vəziyyətlərindən keçir və activity.end() çağırışı ilə bitir. Sistem yaddaş çatışmazlığı olduqda (məsələn, kamera işə salındıqda) aktivliyi məcburi bitirə bilər. Bu halda tətbiq ActivityActivityState.finished vasitəsilə bildiriş alır.
Jestlər Dynamic Island ActivityView daxilində SwiftUI-məzmunu tərəfindən işlənir. Standart jestlər: yığcam vəziyyətə toxunma tətbiqi açır, uzun basma genişləndirilmiş vəziyyəti açır, aşağı sürüşdürmə genişləndirilmiş vəziyyəti bağlayır. Xüsusi jestlər SwiftUI modifierləri (onTapGesture, onLongPressGesture) vasitəsilə aktivlik görünüşü daxilində əlavə edilir.
Sistem Live Activity-ni bitirdikdə (və ya istifadəçi sürüşdürərək silir), tətbiq resursları boşaltmaq üçün finished vəziyyətini işləməlidir. Activity.activityStateUpdates-ə abunə olmaq və aktivlik bitdikdən sonra lokal istinadları silmək tövsiyə olunur.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activity Dynamic Island-da aktivdir")
case .dismissed:
print("Activity istifadəçi tərəfindən gizlədilib")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activity sistem tərəfindən başa çatdırılıb")
cleanupResources()
@unknown default:
break
}
}
}
}
Apple tövsiyəsi (WWDC 2024, Session 10146): istifadəçi diqqətini tələb etməyən statusları göstərmək üçün Dynamic Island-dan istifadə etməyin. Hər bir Live Activity aydın başlama və bitmə triggerinə malik olmalıdır. UI olmadan fon yeniləmələri üçün Live Activities deyil, Background Tasks istifadə edin.
Tez-tez verilən suallar
Dynamic Island iPhone 14 Pro, 14 Pro Max və bütün iPhone 15 və iPhone 16 modellərində (əsas versiyalar daxil olmaqla) mövcuddur. Tərtibat üçün iOS 16.1+ və Xcode 14.1 tələb olunur. Köhnə modellərdə (iPhone X–13) Live Activities-i dəstəkləməyən statik notch kəsikindən istifadə olunur.
Dynamic Island bildirişi ekranın aparat zonasına inteqrasiya edir, məzmunu bağlamadan. Adi bildiriş yuxarıda banner şəklində görünür və bir neçə saniyədən sonra yox olur. Dynamic Island-dakı Live Activities saatlarla aktiv qala bilər və real vaxtda yenilənə bilər (çatdırılma statusu, taymer, musiqi).
APNs vasitəsilə push yeniləmələrindən istifadə edin. Live Activity başladarkən activity.pushToken çağırın və tokeni serverinizə göndərin. Server APNs vasitəsilə yeni ContentState ilə update sorğusu göndərir. Alternativ — eyni tətbiqdən activity.update(using:) vasitəsilə lokal yeniləmə.
iOS iki aktiv Live Activity olduqda Dynamic Island-ı avtomatik olaraq iki seqmentə bölür. Hər bir aktivlik kameranın solunda və sağında minimal vəziyyətdə göstərilir. Seqmentlərdən birinə uzun basdıqda yalnız həmin tətbiqin genişləndirilmiş vəziyyəti açılır.
Yoxlayın: (1) tətbiqin Info.plist-də NSSupportsLiveActivities = YES var, (2) ActivityAttributes və ContentState Codable və Hashable implementasiya edir, (3) iOS versiyası 16.1+, (4) cihaz Dynamic Island-ı dəstəkləyir. Simulyator üçün Xcode-da iPhone 14 Pro və ya daha yenisini istifadə edin.
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