[英]Transition Effect Between Two Embedded Views in SwiftUI
如果我有如下結構:
@State var currentView = "first"
VStack {
if (state == "first") {
View1()
} else if (state == "second") {
View2()
} else {
View3()
}
}
還有一個 View1:
@Published var currentView: String
Button("to second") {
currentView = "second"
}
如何確保View2
在替換View1
時從左側滑動? 我可以動態定義下一個視圖從哪一側滑入嗎?
@Binding
屬性,當點擊按鈕時它們會發生變化.move
可以控制過渡的邊緣(定義視圖從哪一側滑入)我讓你的視圖占據了整個屏幕並有顏色,這樣過渡更明顯。 我還為每個過渡添加了持續時間,您可以修改或刪除它。
import SwiftUI
struct ContentView: View {
@State var currentView = "first"
var body: some View {
VStack {
if (currentView == "first") {
View1(currentView: $currentView.animation())
} else if (currentView == "second") {
View2(currentView: $currentView.animation())
} else {
View3(currentView: $currentView.animation())
}
}
}
}
struct View1: View {
@Binding var currentView: String
var body: some View {
ZStack {
Rectangle().fill(Color.red)
VStack {
Text("View1")
Button("to second") {
self.currentView = "second"
}
}
}
.transition(.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)))
.animation(.linear(duration: 2))
}
}
struct View2: View {
@Binding var currentView: String
var body: some View {
ZStack {
Rectangle().fill(Color.yellow)
VStack {
Text("View2")
Button("to third") {
self.currentView = "third"
}
}
}
.transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
.animation(.linear(duration: 2))
}
}
struct View3: View {
@Binding var currentView: String
var body: some View {
ZStack {
Rectangle().fill(Color.pink)
VStack {
Text("View3")
Button("to first") {
self.currentView = "first"
}
}
}
.transition(.asymmetric(insertion: .move(edge: .bottom), removal: .move(edge: .top)))
.animation(.linear(duration: 2))
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.