Как добиться непрерывной анимации при переключении состояния в SwiftUI?IOS

Программируем под IOS
Ответить
Anonymous
 Как добиться непрерывной анимации при переключении состояния в SwiftUI?

Сообщение Anonymous »

У меня следующий пользовательский интерфейс:
Изображение

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

Red Rectangle
Скорость вращения зависит от значения ползунка. Я добиваюсь этого, используя .linear(duration:).repeatForever(autoreverses: false) (длительность зависит от значения ползунка) и модификатор .id, чтобы останавливать текущую анимацию при каждом изменении значения ползунка.

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

struct ContentView: View {
@State private var level: Double = 0
@State private var rotation: Double = 0

var body: some View {
VStack(spacing: 16) {
Rectangle().fill(.red)
.frame(width: 100, height: 100)
.id(level)
.rotationEffect(Angle(degrees: rotation))
.animation(level > 0 ? .linear(duration: 2 / level).repeatForever(autoreverses: false) : .linear(duration: 2), value: rotation)

Spacer().frame(height: 12)
Slider(value: $level, in: 0...3, step: 1)
HStack {
Text("0")
.fontWeight(.semibold)
Spacer()
Text("1")
.fontWeight(.semibold)
Spacer()
Text("2")
.fontWeight(.semibold)
Spacer()
Text("3")
.fontWeight(.semibold)
}
}
.padding(16)
.onChange(of: level, perform: { _ in
rotation += 360
})
}
}
Моя текущая проблема заключается в том, что когда пользователь меняет значение ползунка, Rectangle сбрасывается в исходное состояние из-за .id, что создает сбой.Вот ссылка на видео о том, как сейчас работает мой код: https://imgur.com/a/6bsUJzm
Мой вопрос заключается в том, как добиться плавного перехода между состояниями, когда пользователь меняет значение ползунка? Будем признательны за любые идеи и предложения!

Подробнее здесь: https://stackoverflow.com/questions/792 ... in-swiftui
Ответить

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

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

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

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

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