Я пытаюсь использовать новый PhaseAnimator из iOS 17 и заметил ошибку. По какой-то причине анимация не освобождается при удалении представления из иерархии, что приводит к сбою приложения.
Пример
enum OuterBreathState: CaseIterable { корпус выдох, вдох масштаб переменной: CGFloat { переключить себя { случай .inhale: вернуть 2 случай .exhale: вернуть 1 } } вар цвет: Цвет { переключить себя { корпус .вдох: возврат .белый случай .выдох: возврат .синий } } } структура PhaseView: Просмотр { var body: some View { PhaseAnimator(OuterBreathState.allCases) { состояние в Круг() .фон(.очистить) .frame(ширина: 150, высота: 150) .padding(.вертикальный) .scaleEffect(state.scale) .background(в: Круг()) .foregroundStyle(state.color) } анимация: {состояние в состояние переключения { case .inhale: return .easeInOut(длительность: 1,5) case .exhale: return .easeInOut(длительность: 3,5) } } } } структура ContentView: Просмотр { var body: some View { Навигационный стек { NavigationLink("push") { ФазовыйПросмотр() } } } } Нажатие на представление работает нормально, но после открытия приложение перестает отвечать
Как ни странно, если я использую триггер (и даже таймер, который переключает триггер, чтобы имитировать цикл), он не дает сбоя. Вот код
перечисление OuterBreathState: CaseIterable { корпус выдох, вдох масштаб переменной: CGFloat { переключить себя { случай .inhale: вернуть 2 случай .exhale: вернуть 1 } } вар цвет: Цвет { переключить себя { корпус .вдох: возврат .белый случай .выдох: возврат .синий } } } структура PhaseView: Просмотр { @State var animate = false let timer = Timer.publish(каждый: 5, допуск: .ноль, on: .main, in: .default).autoconnect() var body: some View { PhaseAnimator(OuterBreathState.allCases, триггер: animate) {состояние в Круг() .фон(.очистить) .frame(ширина: 150, высота: 150) .padding(.вертикальный) .scaleEffect(state.scale) .background(в: Круг()) .foregroundStyle(state.color) } анимация: {состояние в состояние переключения { case .inhale: return .easeInOut(длительность: 1,5) case .exhale: return .easeInOut(длительность: 3,5) } } .onReceive(таймер, выполнение: { _ в анимировать.toggle() }) .onTapGesture { анимировать.toggle() } } } структура ContentView: Просмотр { var body: some View { Навигационный стек { NavigationLink("push") { ФазовыйПросмотр() } } } } #Предварительный просмотр { КонтентПросмотр() } Есть идеи, почему происходит сбой и как заставить это работать? Спасибо!