我正在处理一系列屏幕,这些屏幕应该在按下按钮时发生变化,并且应该从右向左滑入/滑出。
除了.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()
}
}
}
}
2条答案
按热度按时间ryoqjall1#
如何在SwiftUI中反转幻灯片切换:
摘自Apple Developer Documentation:
也可以写成:
因此,要反转动画,只需翻转
insertion
和removal
并将其放入过渡ViewModifier中。因为我需要使用它几次,所以我对
AnyTransition
做了一个扩展,所以我可以直接调用.transition(.backslide)
e5nqia272#
iOS 16