Анимация не работает с комбинацией GeometryReader и NavigationView
У меня есть анимированное изображение, которое скользит вверх и вниз, используя смещение и таймер. Это работает нормально, пока вы не объедините 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 ответ
Решение
В этом случае порядок модификаторов выглядит важным.
Нижеприведенный вариант работает. Протестировано с 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
}
}
}
}