Animation 动画无法与GeometryReader和NavigationView组合使用

Animation 动画无法与GeometryReader和NavigationView组合使用,animation,swiftui,navigationview,geometryreader,Animation,Swiftui,Navigationview,Geometryreader,我有一个动画图像,它使用偏移量和计时器上下滑动。在您将GeometryReader和NavigationView结合起来之前,这一切都很好。对于NavView和Georgeader这两个独立的应用程序来说,动画也可以正常工作。有什么解决办法吗?(我知道,在本例中不需要GeometryReader) 在这种情况下,修改器的顺序看起来很重要 下面的变体有效。使用Xcode 11.4/iOS 13.4进行测试 struct TestView: View { @State var offset

我有一个动画图像,它使用偏移量和计时器上下滑动。在您将GeometryReader和NavigationView结合起来之前,这一切都很好。对于NavView和Georgeader这两个独立的应用程序来说,动画也可以正常工作。有什么解决办法吗?(我知道,在本例中不需要GeometryReader)


在这种情况下,修改器的顺序看起来很重要

下面的变体有效。使用Xcode 11.4/iOS 13.4进行测试

struct TestView: View {

    @State var offsetSwipeUp: CGFloat = 0

    var body: some View{
        let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
        return NavigationView {
            GeometryReader { geometry in
                Image(systemName: "chevron.up")
                    .animation(.easeInOut(duration: 1))
                    .offset(y: CGFloat(self.offsetSwipeUp))
                    .navigationBarTitle("")
                    .navigationBarHidden(true)
            }
        }
        .onReceive(timer){ _ in
            if self.offsetSwipeUp == .zero{
                self.offsetSwipeUp = -10
            } else {
                self.offsetSwipeUp = .zero
            }
        }
    }
}

在这种情况下,修改器的顺序看起来很重要

下面的变体有效。使用Xcode 11.4/iOS 13.4进行测试

struct TestView: View {

    @State var offsetSwipeUp: CGFloat = 0

    var body: some View{
        let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
        return NavigationView {
            GeometryReader { geometry in
                Image(systemName: "chevron.up")
                    .animation(.easeInOut(duration: 1))
                    .offset(y: CGFloat(self.offsetSwipeUp))
                    .navigationBarTitle("")
                    .navigationBarHidden(true)
            }
        }
        .onReceive(timer){ _ in
            if self.offsetSwipeUp == .zero{
                self.offsetSwipeUp = -10
            } else {
                self.offsetSwipeUp = .zero
            }
        }
    }
}