Переход SwiftUI не происходит
Я новичок в SwiftUI, и я пытаюсь использовать
.transition
, но почему-то переход не происходит.
Вы можете увидеть код ниже:
Вид
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
if self.viewModel.model.show {
Text("Showing")
.padding()
} else {
Text("Not Showing")
.padding()
.transition(.asymmetric(insertion: .scale, removal: .opacity))
}
Button {
self.viewModel.show()
} label: {
Text("Tap to change")
}
}
}
ViewModel
class ViewModel: ObservableObject {
@Published private(set) var model = Model()
func show() {
self.model.toggleShow()
}
}
Модель
struct Model {
var show: Bool = true
mutating func toggleShow() {
self.show.toggle()
}
}
Когда я нажимаю кнопку, текст меняется, но перехода не происходит.
Я чувствую, что мне не хватает чего-то тривиального здесь.
Кто-нибудь может помочь?
1 ответ
Ваш код в порядке (кроме того, что вам нужен
VStack
обертывание текста и кнопки), вам нужно только указать SwiftUI использовать переход, обернув команду внутри
withAnimation()
.
Вот что вам просто нужно сделать в ContentView(посмотрите на кнопку):
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
if self.viewModel.model.show {
Text("Showing")
.padding()
} else {
Text("Not Showing")
.padding()
.transition(.asymmetric(insertion: .scale, removal: .opacity))
}
Button {
withAnimation { // This is what you need to trigger the transition
self.viewModel.show()
}
} label: {
Text("Tap to change")
}
}
.animation(.easeIn, value: self.viewModel.show)
}