ios 弹跳动画仅在第二次点击[SwiftUI]后才起作用

jckbn6z7  于 2022-12-01  发布在  iOS
关注(0)|答案(1)|浏览(138)

我在取消隐藏视图后触发动画,但不幸的是,除非我点击两次,否则动画无法工作

struct ContentView: View {

    @State var animate = false
    @State var isViewHidden: Bool = true
    
    var body: some View {
        VStack {
            ZStack {
                    Circle()
                        .fill(.blue).opacity(0.25).frame(width: 40, height: 40).offset(y: self.animate ? 0 : 60)
                        .hides(isViewHidden)
                }
                .animation((Animation.linear(duration: 1.5).repeatForever(autoreverses: true))
                           , value: self.animate ? 0 : 60)
            Spacer()
            Button("Tap here") {
                self.isViewHidden = false
                self.animate.toggle()
            }
        }
        .padding()
    }
}

extension View {
    @ViewBuilder
    func hides(_ isHidden: Bool) -> some View {
        if isHidden {
            hidden()
        } else {
            self
        }
    }
}
juzqafwq

juzqafwq1#

SwiftUI使用一个 before view 和一个 after view 来制作动画。你在更新self.animate的同时引入了要制作动画的视图,所以Swift没有一个 before view 来制作动画。
将View扩展名更改为:

extension View {
    @ViewBuilder
    func hides(_ isHidden: Bool) -> some View {
        self.opacity(isHidden ? 0 : 1)
    }
}

这会使视图一直显示在屏幕上,但只是通过使其不可见来隐藏它。这样,视图从一开始就在那里进行动画制作。

相关问题