Dynamic Island: шта је то, интеракција са Dynamic Island

Аутор: IT Sectr Објављено: 2026-02-28 Време читања: 9 мин

Dynamic Island — интерактивна област у горњем делу iPhone 14 Pro и свих iPhone 15/16, која обједињује обавештења, позадинске активности и системске индикаторе у јединственој динамичкој зони. За разлику од традиционалног изреза (notch), Dynamic Island мења облик и величину у зависности од тренутног контекста. Према подацима Apple-а (WWDC 2024), корисници интерагују са Dynamic Island у просеку 12 пута дневно — преко додира, дугих притисака и Live Activities са ActivityKit. Више о анимацијама у iOS прочитајте у чланку о Corner Radius.

Главно

  • Dynamic Island — програмско-хардверско решење Apple-а, које замењује изрез интерактивном зоном са променљивом геометријом.
  • Live Activities — виџети на Dynamic Island који раде преко фрејмворка ActivityKit (iOS 16.1+).
  • Три стања: компактно (икона), минимално (пилула), проширено (панел са садржајем).
  • ActivityKit — Swift фрејмворк за објављивање Live Activities на Dynamic Island и Lock Screen.
  • Dynamic Island подржава гестове: додир за отварање апликације, дуги притисак за отварање панела.

Шта је Dynamic Island?

Dynamic Island — је интерактивна област заснована на програмско-хардверском решењу Apple-а, представљена септембра 2022. године заједно са iPhone 14 Pro. Физички, то је изрез у облику пилуле, окружен OLED пикселима који динамички мењају боју и облик. Apple користи комбинацију хардверског одељка за камеру и Face ID са софтверским рендеровањем црних области око њега, стварајући илузију „живог" острвцета.

Главни циљ Dynamic Island-а је да елиминише јаз између системских обавештења и активног садржаја. Уместо да се обавештења појављују у центру екрана (као на Android-у) или у облику банера на врху (као на старијим iOS-има), Dynamic Island их интегрише директно у хардверску зону. Ово смањује ометање пажње и ствара осећај јединственог простора.

Према подацима Apple-а (iOS 17 Adoption Statistics, 2024), Dynamic Island је доступан на 38% активних iPhone-а. Почевши од iPhone 15 (2023), сви модели у серији су добили Dynamic Island, укључујући основне моделе. У iOS 18, Apple је проширио API Live Activities, додајући подршку за тајмере одбројавања и спортске резултате директно на Dynamic Island.

Који модели подржавају Dynamic Island

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. На iPad-у Dynamic Island не постоји. За развој под Dynamic Island потребан је Xcode 14.1+ и iOS 16.1+.

Како ради Dynamic Island: три стања

Dynamic Island подржава три стања приказа: компактно (compact), минимално (minimal) и проширено (expanded). Прелаз између стања је анимиран коришћењем UIKit-анимација и Core Animation. Систем сам управља приоритетом активности: ако неколико апликација покуша да прикаже садржај истовремено, iOS користи ред на основу времена покретања последње активности.

СтањеВеличинаСадржајПример
Compact49×18 ptИкона апликације + системска иконаТајмер, музика, позив
MinimalДо 66×18 ptИкона + кратак текстУпутства за навигацију, кораци
ExpandedДо 364×160 ptПуноправни виџет са садржајемСпортски резултат, статус таксија

Компактно стање — стандардни приказ Dynamic Island када је један позадински задатак активан. Приказује се као заобљена пилула са иконом апликације лево и системском иконом десно. Подразумевано, све Live Activities почињу у компактном стању.

Минимално стање настаје када су два или више задатака истовремено активни. Dynamic Island се „раздељује" на два одвојена елемента лево и десно од камере. Минимално стање омогућава приказ два независна извора информација, на пример време до доласка таксија и тренутну нумеру.

Проширено стање се активира дугим притиском на Dynamic Island. У овом режиму се приказује пуноправни виџет са подесивим садржајем: наслови, описи, траке напретка, дугмад. Проширено стање подржава скроловање и интерактивне елементе.

ActivityKit и Live Activities: Swift API

ActivityKit — Swift фрејмворк, представљен у iOS 16.1, који омогућава апликацијама да објављују Live Activities на Dynamic Island и Lock Screen. ActivityKit користи архитектуру засновану на ActivityView и ActivityAttributes: први дефинише тип садржаја, други — променљиве податке. Фрејмворк ради у вези са WidgetKit, али за разлику од виџета, Live Activities се могу ажурирати у реалном времену без отварања апликације.

swift
import ActivityKit
import SwiftUI

// Дефинишемо атрибуте активности
struct DeliveryAttributes: ActivityAttributes {
    public struct ContentState: Codable, Hashable {
        var driverName: String
        var distanceToArrival: Double
        var estimatedMinutes: Int
    }
    var orderNumber: String
}

// Покрећемо Live Activity
func startDeliveryActivity() {
    let initialState = DeliveryAttributes.ContentState(
        driverName: "Алексеј",
        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 се ажурирају преко ActivityView, који рендерује SwiftUI садржај за Dynamic Island. Систем сам одређује који шаблон да користи (компактни, минимални или проширени), у зависности од величине Dynamic Island и броја активности. За ажурирање садржаја позовите activity.update(using: contentState). За завршетак — activity.end(dismissalPolicy: .immediate).

Динамичка обавештења са Push ажурирањима

ActivityKit подржава push ажурирања преко APNs (Apple Push Notification Service). При покретању Live Activity можете затражити pushToken и слати ажурирања са сервера без потребе за покретањем апликације на уређају. Push ажурирања раде преко activity.pushToken и Activity.pushToStartToken за даљинско покретање Live Activity.

swift
// Ажурирање Live Activity преко Push-а
func updateActivity(activity: Activity<DeliveryAttributes>) {
    let updatedState = DeliveryAttributes.ContentState(
        driverName: "Алексеј",
        distanceToArrival: 1.2,
        estimatedMinutes: 4
    )
    let alertConfiguration = AlertConfiguration(
        title: "Курир је близу",
        body: "Алексеј стиже за 4 минута",
        sound: .default
    )
    await activity.update(
        using: updatedState,
        alertConfiguration: alertConfiguration
    )
}

AlertConfiguration — додатни параметар који приказује обавештење изнад Dynamic Island при важним ажурирањима (на пример, "Курир је стигао"). Без AlertConfiguration садржај се ажурира бешумно, што је погодно за траке напретка и тајмере.

Dynamic Island vs Notch: поређење

Notch (изрез) — хардверска зона iPhone X–13, која садржи предњу камеру, FaceID сензор и звучник. Notch је статичан: његова величина и облик се не мењају, а обавештења се приказују испод њега у облику стандардних банера. Dynamic Island, насупрот томе, користи пикселе око изреза за приказ садржаја, чинећи хардверски елемент делом интерфејса.

КритеријумDynamic IslandNotch
ИнтерактивностПодржава додире, дуге притиске, превлачењеНије интерактиван
Адаптација садржајаМења облик у зависности од контекстаСтатичан, садржај испод изреза
Live ActivitiesУграђена подршка преко ActivityKitНе — само обична обавештења
ВишезадатностДве истовремене активности (лево и десно)Само једна активност
ДоступностiOS 16.1+, iPhone 14 Pro и новијиiOS 11+, iPhone X–13

Према Apple Human Interface Guidelines (2025), Dynamic Island не треба користити за рекламе или стално приказивање статичког садржаја. Live Activities су намењене само за позадинске задатке са јасним животним циклусом: тајмери, достава, спорт, музика, навигација. Кршење ових правила води одбијању апликације у App Store Review.

Животни циклус и гестови Dynamic Island

Dynamic Island има строг животни циклус: активност почиње захтевом преко Activity.request(), пролази кроз стања активна/паузирана/ажурирана и завршава се позивом activity.end(). Систем може присилно завршити активност при недостатку меморије (на пример, при покретању камере). У овом случају, апликација добија обавештење преко ActivityActivityState.finished.

Гестови Dynamic Island се обрађују SwiftUI садржајем унутар ActivityView. Стандардни гестови: додир на компактно стање отвара апликацију, дуги притисак отвара проширено стање, превлачење наниже затвара проширено стање. Прилагођени гестови се додају преко SwiftUI модификатора (onTapGesture, onLongPressGesture) унутар приказа активности.

Обрада стања finished

Када систем заврши Live Activity (или је корисник превлачењем уклони), апликација треба да обради стање finished за ослобађање ресурса. Препоручује се претплата на Activity.activityStateUpdates и уклањање локалних референци на активност након завршетка.

swift
import ActivityKit

func observeActivityState(activity: Activity<DeliveryAttributes>) {
    Task {
        for await state in activity.activityStateUpdates {
            switch state {
            case .active:
                print("Activity активна на Dynamic Island")
            case .dismissed:
                print("Activity сакривена од стране корисника")
                await activity.end(dismissalPolicy: .immediate)
            case .finished:
                print("Activity завршена од стране система")
                cleanupResources()
            @unknown default:
                break
            }
        }
    }
}

Препорука Apple-а (WWDC 2024, Session 10146): не користите Dynamic Island за приказ статуса који не захтевају пажњу корисника. Свака Live Activity треба да има јасан окидач покретања и завршетка. За позадинска ажурирања без UI користите Background Tasks, а не Live Activities.

Често постављана питања

На којим iPhone-има ради Dynamic Island?

Dynamic Island је доступан на iPhone 14 Pro, 14 Pro Max и свим моделима iPhone 15 и iPhone 16 (укључујући основне верзије). За развој је потребан iOS 16.1+ и Xcode 14.1. На старијим моделима (iPhone X–13) користи се статични изрез notch, који не подржава Live Activities.

Чим се Dynamic Island разликује од обичног обавештења?

Dynamic Island интегрише обавештење у хардверску зону екрана, не прекривајући садржај. Обично обавештење се појављује у облику банера на врху и нестаје након неколико секунди. Live Activities на Dynamic Island могу остати активне сатима и ажурирати се у реалном времену (статус доставе, тајмер, музика).

Како ажурирати садржај на Dynamic Island без отварања апликације?

Користите push ажурирања преко APNs-а. При покретању Live Activity позовите activity.pushToken и пошаљите токен на ваш сервер. Сервер шаље update захтев преко APNs-а са новим ContentState. Алтернатива — локално ажурирање преко activity.update(using:) из саме апликације.

Како приказати две активности истовремено на Dynamic Island?

iOS аутоматски дели Dynamic Island на два сегмента када постоје две активне Live Activities. Свака активност се приказује у минималном стању лево и десно од камере. При дугом притиску на један од сегмената отвара се проширено стање само те апликације.

Зашто се моја Live Activity не појављује на Dynamic Island?

Проверите: (1) апликација има NSSupportsLiveActivities = YES у Info.plist, (2) ActivityAttributes и ContentState имплементирају Codable и Hashable, (3) iOS верзија 16.1+, (4) уређај подржава Dynamic Island. За симулатор користите iPhone 14 Pro или новији у Xcode-у.

Закључак

  • Dynamic Island — интерактивна зона iPhone 14 Pro+, која замењује статични notch.
  • Подржава три стања: компактно, минимално и проширено са глатком анимацијом прелаза.
  • ActivityKit — Swift фрејмворк за објављивање Live Activities на Dynamic Island и Lock Screen.
  • Live Activities се ажурирају путем локалних позива или push обавештења преко APNs-а.
  • Гестови: додир за прелазак у апликацију, дуги притисак за отварање панела, превлачење за затварање.
  • Dynamic Island подржава до две истовремене активности са поделом на сегменте.
  • Apple ограничава коришћење Live Activities само на позадинске задатке са јасним временским оквирима.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође