SwiftUI状态变量非对称过渡

时间:2019-12-19 21:28:51

标签: swiftui

是否可以在屏幕上更改不对称过渡。例如,文本的不对称过渡为

.transition(.asymmetric(insertion: .move(edge: .trailing) removal: .move(edge: .leading)))

当文本在屏幕上时,过渡需要更改为此

.transition(.asymmetric(insertion: .move(edge: .trailing) removal: .opacity))

我创建了一个测试程序,该程序使用一个@State变量来更改过渡。问题是在查看removal

之后尝试更改insertion过渡时

要使用下面的代码模拟问题,只需按“动画文本”,然后按“更改动画”,然后按“动画文本”。在第三次按“动画文本”(当文本不在屏幕上)之前,您将看到更改动画无效。

import SwiftUI
// Xcode 11.3
struct ContentView: View {

    @State var buttonClick: Bool = false

    @State var showText: Bool = false

    var body: some View {
        VStack(spacing: 10){
            if showText == true{
                Text("hello")
                    .transition(.asymmetric(insertion: buttonClick ? .move(edge: .trailing) : .opacity, removal: buttonClick ? .move(edge: .leading) : .opacity))
            }

            Button (action: { withAnimation { self.buttonClick.toggle() } }) {
                Text("change transition")
            }
            Button (action: { withAnimation { self.showText.toggle() }}) {
                Text("Animate text")
            }
        }

    }
}

0 个答案:

没有答案