首页 > 解决方案 > 在不指定 DispatchQueue 的情况下使用 withAnimation 会发生什么

问题描述

struct MyShimmer: View {
    @State var show = false

    var body: some View {
        ZStack {
            Color.black
            VStack {
                ZStack {
                    Text("Chao")
                        .foregroundColor(Color.white.opacity(0.5))
                        .font(.system(size: 40))
                    Text("Chao")
                        .foregroundColor(Color.white)
                        .font(.system(size: 40))
                        .mask(
                            Color.red.opacity(0.5)
                                .frame(width: 20)
                                .offset(x: self.show ? 180 : -130)
                        )
                }
                .onAppear(){
                    DispatchQueue.main.async {
                        withAnimation(Animation.default.speed(0.15).delay(0).repeatForever(autoreverses: false)){
                            self.show.toggle()
                        }
                    }
                }
            }
        }
    }
}

问题是,如果我注释掉 DispatchQueue.main.async,整个视图会从左上角或屏幕向外扩展。

如果我在某处放置一个按钮并在单击按钮时执行不带 DispatchQueue.main.async 的 withAnimation 任务,则它可以正常工作

有谁知道会发生什么?

我正在使用 XCode(版本 12.5.1 (12E507))我的 mac 正在运行 macos big sur 11.4 (20F71)

标签: iosswiftuiswiftui-animation

解决方案


推荐阅读