Swift PhaseAnimator сохраняет циклIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Swift PhaseAnimator сохраняет цикл

Сообщение Гость »


Я пытаюсь использовать новый 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") { ФазовыйПросмотр() } } } } Нажатие на представление работает нормально, но после открытия приложение перестает отвечать 😓 На самом деле происходит сбой обновления контента. Если я не делаю обновлений в Круге, все работает нормально. Я также попробовал использовать завершающую функцию phaseAnimator, у меня такое же поведение.`

Как ни странно, если я использую триггер (и даже таймер, который переключает триггер, чтобы имитировать цикл), он не дает сбоя. Вот код

перечисление 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") { ФазовыйПросмотр() } } } } #Предварительный просмотр { КонтентПросмотр() } Есть идеи, почему происходит сбой и как заставить это работать? Спасибо!
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Swiftui Phaseanimator сделайте джиттер в листе в листе.
    Anonymous » » в форуме IOS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Swiftui Phaseanimator сделайте джиттер в листе в листе.
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Swiftui Phaseanimator сделайте джиттер в листе в листе.
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Могу ли я объединить C++ и Swift в одном пакете Swift, используя диспетчер пакетов Swift?
    Гость » » в форуме C++
    0 Ответы
    219 Просмотры
    Последнее сообщение Гость
  • Изображение, созданное SigaturePad, не сохраняет надпись, оно сохраняет только фон [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous

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