gpt4 book ai didi

NavigationUI中的SwiftUI自定义动画过渡?

转载 作者:行者123 更新时间:2023-12-03 09:36:49 24 4
gpt4 key购买 nike

SwiftUI中有没有一种方法可以更改NavigationView/NavigationLink的标准行为,即从一个 View 滑动到另一个 View ?我想要一个自定义动画/过渡,例如淡入/淡出。

我正在尝试一阵子,解决了一半,但在下半场苦苦挣扎。这段代码:

struct ContentView: View {
@State var appeared: Double = 0.0

var body: some View {
NavigationView {
VStack {
Text("\(appeared)")
NavigationLink(destination: ViewB()) {Text("go to View B")}
}
.opacity(appeared)
.animation(Animation.easeInOut(duration: 3.0), value: appeared)
.onAppear {self.appeared = 1.0}
.onDisappear {self.appeared = 0.0}
}
}
}

该 View 出现时,工作正常。通过在3秒钟内将不透明度更改为1.0来淡入。都好。但是,当单击 NavigationLink进入 View B时,它会滑移该 View ,并且 View B(具有相同的逻辑)会慢慢淡入。我猜这是因为 onDisappear实际上是在 View 消失时触发的,而不是在 View 即将移开时触发的。

有没有机会告诉SwiftUI不要滑动或滑动,而是执行自定义动画/过渡?

我正在使用Xcode 11.2.1

最佳答案

这有点晚了,但是我刚遇到这个问题,也许我的解决方案可以帮助其他有此问题的人。

我需要更改不透明度,但是我无法使用NavLink进行更改,因此我做了如下操作:

struct example: View {
@State var firstView = true
@State var appeared: Double = 0
var body: some View {
VStack{
if firstView{
VStack{
Button(action: {
self.firstView = false
}){
Text("change view")
}
}
}
else{
VStack{
Text("Hello, World!")
}
.opacity(appeared)
.animation(Animation.easeInOut(duration: 3.0), value: appeared)
.onAppear {self.appeared = 1.0}
.onDisappear {self.appeared = 0.0}
}
}

}
}

这个想法是,当按下按钮时(或执行所需的任何计算时),您可以使用if-else {}结构模拟转换。

希望对您有所帮助!

关于NavigationUI中的SwiftUI自定义动画过渡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59271168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com