Используя SwiftUI, у меня есть вид, который включает ползунок, в котором я использую переход, чтобы скользить снизу. Все работает хорошо, пока ползунок не перемещается быстро вперед и назад. При этом текстовое поле анимируется и будет показывать «...» при изменении от 1 до двух цифр.
Вот мой тестовый код, показывающий это:
struct TestSliderView: View {
@State private var val: Double = 0
@State private var showSlider: Bool = false
var body: some View {
VStack {
Button(action: {
self.showSlider.toggle()
}) {
Text("Show Slider")
}
Spacer()
if showSlider {
JustTheSlider(val: $val)
.padding()
.transition(.move(edge: .bottom))
.animation(.linear(duration: 0.4))
}
}
}
}
struct JustTheSlider: View {
@Binding var val: Double
var body: some View {
VStack {
Text("Slider")
.font(.title)
HStack {
Text("Value: ")
.frame(minWidth: 80, alignment: .leading)
Slider(value: $val, in: 0...30, step: 1)
Text("\(Int(val))")
.frame(minWidth: 20, alignment: .trailing)
.font(Font.body.monospacedDigit())
.padding(.horizontal)
}
}
}
}
Одним из способов было бы удалить строку .animation(.linear(duration: 0.4))
и обернуть действие кнопки анимацией, например:
Button(action: {
withAnimation(.linear(duration: 0.4)) {
self.showSlider.toggle()
}
}) {
Text("Show Slider")
}
Это останавливает анимацию текста, но тогда представление только выдвигается и просто появляется без анимации слайдов.
Есть идеи?