如何根据状态变化在两个自定义视图之间进行转换?
How to transition between two custom views based on state change?
我在 ObservedObject 中有一个状态变量,用于确定我在 SwiftUI 中显示的两个自定义视图中的哪一个。
我已经在不同的地方弄乱了 .animation(.easeIn) 并尝试了 .withAnimation(),但是在试验时除了 XCode 抱怨之外什么也做不了。无论我把 .animation() 放在哪里,我都会得到一个编译错误,当我 运行 代码时没有任何反应。当我触发状态更改时,只需从一个视图轻拂到另一个视图即可。
struct EventEditorView : View { /* SwiftUI based View */
var eventEditorVC : EventEditorVC!
@ObservedObject var eventEditorDataModel: EventEditorDataModel
var body: some View {
switch( eventEditorDataModel.editMode) {
case .edit:
EventEditModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
case .view:
EventViewModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
}
}
}
您可以在您的元素上使用 .transition
并在更改影响其状态的 value
时使用 withAnimation
:
enum ViewToShow {
case one
case two
}
struct ContentView: View {
@State var viewToShow : ViewToShow = .one
var body: some View {
switch viewToShow {
case .one:
DetailView(title: "one", color: .red)
.transition(.opacity.combined(with: .move(edge: .leading)))
case .two:
DetailView(title: "two", color: .yellow)
.transition(.opacity.combined(with: .move(edge: .top)))
}
Button("Toggle") {
withAnimation {
viewToShow = viewToShow == .one ? .two : .one
}
}
}
}
struct DetailView : View {
var title: String
var color : Color
var body: some View {
Text(title)
.background(color)
}
}
我在 ObservedObject 中有一个状态变量,用于确定我在 SwiftUI 中显示的两个自定义视图中的哪一个。
我已经在不同的地方弄乱了 .animation(.easeIn) 并尝试了 .withAnimation(),但是在试验时除了 XCode 抱怨之外什么也做不了。无论我把 .animation() 放在哪里,我都会得到一个编译错误,当我 运行 代码时没有任何反应。当我触发状态更改时,只需从一个视图轻拂到另一个视图即可。
struct EventEditorView : View { /* SwiftUI based View */
var eventEditorVC : EventEditorVC!
@ObservedObject var eventEditorDataModel: EventEditorDataModel
var body: some View {
switch( eventEditorDataModel.editMode) {
case .edit:
EventEditModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
case .view:
EventViewModeView(eventEditorVC: eventEditorVC, eventEditorDataModel: eventEditorDataModel)
}
}
}
您可以在您的元素上使用 .transition
并在更改影响其状态的 value
时使用 withAnimation
:
enum ViewToShow {
case one
case two
}
struct ContentView: View {
@State var viewToShow : ViewToShow = .one
var body: some View {
switch viewToShow {
case .one:
DetailView(title: "one", color: .red)
.transition(.opacity.combined(with: .move(edge: .leading)))
case .two:
DetailView(title: "two", color: .yellow)
.transition(.opacity.combined(with: .move(edge: .top)))
}
Button("Toggle") {
withAnimation {
viewToShow = viewToShow == .one ? .two : .one
}
}
}
}
struct DetailView : View {
var title: String
var color : Color
var body: some View {
Text(title)
.background(color)
}
}