Переход 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)

    }
Другие вопросы по тегам