У меня есть вид, расположенный поверх mapView (в ZStack), и я хочу иметь возможность увеличивать и уменьшать зеленый верхний вид с помощью модификатора анимации .easeInOut
, примененного к непрозрачности вида. Как вы можете видеть в gif, он красиво исчезает, но внезапно исчезает.
Если я удаляю mapView, то все хорошо. Если я заменю mapView на простой Rectangle()
, проблема вернется, поэтому я считаю, что это связано с ZStack, а не с картой. Как ни странно, я на самом деле использую Mapbox, а не MapKit (как в приведенном ниже коде для простоты), и поведение исчезновения / внезапного исчезновения меняется на обратное.
import SwiftUI
import MapKit
struct ContentView: View {
@State private var show = false
var body: some View {
VStack {
ZStack {
MapView()
if show {
LabelView()
.transition(AnyTransition.opacity.animation(.easeInOut(duration: 1.0)))
}
}
Button("Animate") {
self.show.toggle()
}.padding(20)
}
}
}
struct MapView: UIViewRepresentable {
func makeUIView(context: Context) -> MKMapView {
let mapView = MKMapView()
mapView.mapType = .standard
return mapView
}
func updateUIView(_ uiView: MKMapView, context: Context) { }
}
struct LabelView: View {
var body: some View {
Text("Hi there!")
.padding(10)
.font(.title)
.foregroundColor(.white)
.background(RoundedRectangle(cornerRadius: 8).fill(Color.green).shadow(color: .gray, radius: 3))
}
}
Я попытался использовать альтернативный код анимации, заменив LabelView
переход с помощью:
.transition(.opacity)
и изменение кода кнопки на:
Button("Animate") {
withAnimation(.easeInOut(duration: 1.0)) {
self.show.toggle()
}
}
, но каждый раз появляется одно и то же поведение. Я предполагаю, что это ошибка SwiftUI, но не удалось найти предыдущую ссылку.