Анимация не работает с комбинацией GeometryReader и NavigationView - PullRequest
1 голос
/ 29 апреля 2020

У меня есть анимированное изображение, которое скользит вверх и вниз, используя смещение и таймер. Это работает совершенно нормально, пока вы не объедините 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)
        }
    }
}
}

1 Ответ

0 голосов
/ 29 апреля 2020

В этом случае порядок модификаторов выглядит важным.

Работает приведенный ниже вариант. Протестировано с 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
            }
        }
    }
}
...