延迟 SwiftUI 中的转换
Posted
技术标签:
【中文标题】延迟 SwiftUI 中的转换【英文标题】:Delay a transition in SwiftUI 【发布时间】:2020-02-17 22:07:59 【问题描述】:如何延迟过渡?我想点击一个按钮,然后视图应该延迟转换。
我有以下代码,但没有正确同步。
struct ContentView: View
@State var showOne = true
var body:some View
VStack
if showOne
HStack
Spacer()
Text("One")
Spacer()
.animation(Animation.default.delay(2))
.background(Color.red)
.transition(.slide)
else
HStack
Spacer()
Text("Two")
Spacer()
.background(Color.blue)
.animation(Animation.default.delay(1))
.transition(.slide)
Button("Toggle")
withAnimation()
self.showOne.toggle()
【问题讨论】:
您确定,您要延迟(推迟)吗?请在按下切换按钮后指定应执行的操作和顺序。 【参考方案1】:如果您添加明确的id
,它会按您的意愿工作。请注意,我只制作了一个动画延迟,以便更明显地表明这是有效的。
struct ContentView: View
@State var showOne = true
var body:some View
VStack
if showOne
HStack
Spacer()
Text("One")
Spacer()
.background(Color.red)
.id("one")
.animation(Animation.default)
.transition(.slide)
else
HStack
Spacer()
Text("Two")
Spacer()
.background(Color.blue)
.id("two")
.animation(Animation.default.delay(2))
.transition(.slide)
Button("Toggle")
withAnimation
self.showOne.toggle()
我发现一个明确的id
在我想使用过渡的大部分时间都有帮助。在您的示例中,不使用 id
可能会导致文本在背景之前更改。这似乎是一个错误,我建议对此提交反馈。
【讨论】:
好吧,我花了很长时间才发现我的解决方案出了问题。当您用两个不同的视图替换HStack
时,动画再次被破坏。你知道如何解决吗?我在这里为此创建了一个新问题:***.com/questions/60464094/broken-animation-swiftui以上是关于延迟 SwiftUI 中的转换的主要内容,如果未能解决你的问题,请参考以下文章
iOS 14.2 中的 SwiftUI PageTabView 性能问题滞后