结合GeometryReader和NavigationView的动画效果不佳。

问题描述 投票:1回答:1

我有一个动画图像,使用偏移量和一个定时器上下滑动。在结合GeometryReader和NavigationView之前,这个工作完全正常。对于这两个,NavView和GeoReader单独使用,动画也能正常工作。有什么解决办法吗?(我知道,在这个例子中不需要GeometryReader)

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))
                .onReceive(timer){ _ in
                    if self.offsetSwipeUp == .zero{
                        self.offsetSwipeUp = -10
                    } else {
                        self.offsetSwipeUp = .zero
                    }
            }
            .offset(y: CGFloat(self.offsetSwipeUp))
            .navigationBarTitle("")
            .navigationBarHidden(true)
        }
    }
}
}
animation swiftui navigationview geometryreader
1个回答
0
投票

在这种情况下,修改器的顺序显得很重要。

下面的变体可以工作。用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
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.