У меня есть список, где каждая строка использует новый макрос @Observable для своей модели представления. Внутри строки я использую PhaseAnimator, чтобы создать эффект непрерывной пульсации значка. Все работает нормально, пока я не проведу пальцем по экрану, чтобы удалить строку или переупорядочить список.
Ошибка:
Код: Выделить всё
=== AttributeGraph: cycle detected through attribute 124832 ===
CoreAnimation: [Warning] Aggregated stats for Animation ID 42: { ... }
(lldb)
Что я пробовал:
- Переключение обратно на 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)
}
}
}
}
Мобильная версия