【发布时间】:2021-12-06 18:07:27
【问题描述】:
我希望为我的 Google 地图的填充设置动画,因为当底部工作表出现时,地图填充会动态调整大小。
GMSMapView.padding documentation 说它可以通过基于 UIView 块的动画来完成,但我不确定这将如何与 SwiftUI 应用程序联系起来?
底部工作表工作正常,它按预期显示并将正确的填充值传递给 MapView。这只是我无法理解的动画。 (如果你好奇的话,底部表格使用这个组件https://github.com/LucasMucGH/BottomSheet)
任何帮助将不胜感激,谢谢。
当前相关代码:
struct MapView: UIViewRepresentable {
var bottomPadding: CGFloat
private let mapView = GMSMapView(frame: .zero)
func makeUIView(context: Context) -> GMSMapView {
return mapView
}
func updateUIView(_ mapView: GMSMapView, context: Context) {
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: bottomPadding, right: 0)
}
}
struct ContentView: View {
@State var showBottomSheet: ShowBottomSheet = .hidden
var bottomSheetHeight: CGFloat {
if showBottomSheet == .visible {
return showBottomSheet.rawValue
} else {
return 0
}
}
var body: some View {
GeometryReader { geometry in
ZStack {
// Map
MapView(bottomPadding: geometry.size.height * bottomSheetHeight)
.edgesIgnoringSafeArea(.all)
.bottomSheet(
bottomSheetPosition: $showBottomSheet,
options: [
.allowContentDrag,
.swipeToDismiss,
.noBottomPosition,
.shadow()
],
content: {}
)
}
}
}
}
enum ShowBottomSheet: CGFloat, CaseIterable {
case hidden = 0, visible = 0.5
}
【问题讨论】:
标签: swift swiftui google-maps-sdk-ios gmsmapview