我正在處理一系列螢屏,這些螢屏應該在按下按鈕時發生變化,并且應該從右向左滑入/滑出。
除了.slide過渡使它從前緣移入并移出到后緣之外,一切都運行良好。(從左到右)
我想在不改變尾隨/前導是什么的情況下反轉過渡影片方向(至少不是在應用程式的整個背景關系中)。
我嘗試將過渡更改為 ,.move(edge: .trailing)但隨后視圖從同一方向進出。
import SwiftUI
struct ContentView: View {
enum screens {
case start, mid, final
}
@State var curScreen: screens = .start
func changeScreen() {
switch curScreen {
case .start:
curScreen = .mid
case .mid:
curScreen = .final
case .final:
return
}
}
var body: some View {
switch curScreen {
case .start:
ScreenView(callback: changeScreen, text: "Start")
.transition(.slide)
case .mid:
ScreenView(callback: changeScreen, text: "Mid")
.transition(.slide)
case .final:
ScreenView(callback: {}, text: "Final")
.transition(.slide)
}
}
}
struct ScreenView: View {
let callback: () -> ()
let text: String
var body: some View {
Text(text)
.padding()
.frame(maxWidth: .infinity)
.onTapGesture {
withAnimation(.default) {
callback()
}
}
}
}
uj5u.com熱心網友回復:
@Asperi已經回答了我的問題,但是當我搜索它時它沒有出現在 google 或 stackoverflow 上,所以這里再次為演算法:
如何在 SwiftUI 中反轉幻燈片過渡:
摘自 Apple 開發者檔案:
static var slide: AnyTransition
// A transition that inserts by moving in from the leading edge, and removes by moving out towards the trailing edge.
也可以寫成:
AnyTransition.asymmetric(
insertion: .move(edge: .leading),
removal: .move(edge: .trailing)
)
因此,要反轉影片只需翻轉insertion并將removal其放入您的過渡 ViewModifier 中。
因為我需要使用它幾次,AnyTransition所以我做了一個擴展,所以我可以打電話.transition(.backslide)
extension AnyTransition {
static var backslide: AnyTransition {
AnyTransition.asymmetric(
insertion: .move(edge: .trailing),
removal: .move(edge: .leading))}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334701.html
標籤:ios 迅速 苹果手机 迅捷 swiftui-动画
