SwiftUI PhaseAnimator вызывает сбой цикла AttributeGraph при вложении в список с помощью @ObservableIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI PhaseAnimator вызывает сбой цикла AttributeGraph при вложении в список с помощью @Observable

Сообщение Anonymous »

Я столкнулся с очень специфическим сбоем во время выполнения в iOS 19.2 (Xcode 17.1), о котором я нигде не упоминал.
У меня есть список, где каждая строка использует новый макрос @Observable для своей модели представления. Внутри строки я использую PhaseAnimator, чтобы создать эффект непрерывной пульсации значка. Все работает нормально, пока я не проведу пальцем по экрану, чтобы удалить строку или переупорядочить список.
Ошибка:

Код: Выделить всё

=== AttributeGraph: cycle detected through attribute 124832 ===
CoreAnimation: [Warning] Aggregated stats for Animation ID 42: { ... }
(lldb)
Приложение зависает на секунду, а затем аварийно завершает работу с EXC_BAD_ACCESS внутри частной структуры AttributeGraph.
Что я пробовал:
  • Переключение обратно на withAnimation и onAppear (это исправляет ситуацию, но я теряю фазовую настройку) логика).
  • Перемещение состояния @Observable в родительское представление (без изменений).
  • Использование .id(UUID()) в PhaseAnimator (прекращает сбой, но вызывает массовое мерцание).
Похоже, что проход макета для действия смахивания списка конфликтуют с циклом обновления аниматора, создавая бесконечный цикл в графе зависимостей.

Код: Выделить всё

struct TaskRow: View {
@Bindable var viewModel: TaskItem // @Observable class

var body: some View {
HStack {
Text(viewModel.title)
Spacer()
Image(systemName: "clock.fill")
.phaseAnimator([0.5, 1.0], trigger: viewModel.isOverdue) { content, phase in
content.opacity(phase)
}
}
}
}
Кто-нибудь нашел способ отделить PhaseAnimator от этапа макетирования режима редактирования List?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»