Код: Выделить всё
struct View {
@State private var text: String = "Hello, World!"
var body: some View {
AnimatedTextView(text: text)
Button("Tap me") {
withAnimation {
text += " +1" // control animation
}
}
}
}
struct AnimatedTextView: View {
let text: String
var body: some View {
Text(text)
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .leading).combined(with: .opacity)
))
.id(UUID())
}
}
Код: Выделить всё
struct ParentView: View {
@State private var text: String = "Hello, World!"
var body: some View {
AnimatedTextView(text: text)
Button("Tap me") {
text += " +1" // no more withAnimation required
}
}
}
struct AnimatedTextView: View {
let text: String
@State private var displayedText: String = ""
var body: some View {
Text(displayedText)
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .leading).combined(with: .opacity)
))
.id(UUID())
.onAppear {
displayedText = text
}
.onChange(of: text) { _, newValue in
withAnimation {
displayedText = newValue
}
}
}
}
Хотя это работает нормально, для этого требуется дополнительный @state var для свойства, которое должно быть анимировано. В этом примере это не имеет большого значения, где AnimatedTextView имеет только одно свойство. Тем не менее, в реальных взглядах с множеством различных свойств, которые должны быть анимированы при изменениях, это может стать довольно неприятным очень быстро. < /P>
Так: это «правильный» подход для решения этой проблемы , или есть способ сделать это без «@state var» для каждого анимированного свойства?
Подробнее здесь: https://stackoverflow.com/questions/794 ... tional-sta
Мобильная версия