Swift中如何为Google地图添加服务器自定义标记并修正缩放异常
解决Google Maps iOS自定义标记滚动/缩放时变大的问题
嘿,我明白你遇到的问题了——当你缩放(或滚动)地图时,自定义标记会跟着变大,这确实很影响体验。咱们来一步步解决它:
问题根源
默认情况下,GMSMarker的icon属性会随着地图的缩放级别自动调整大小,这是Google Maps SDK的默认行为。如果你的需求是让标记保持固定尺寸,不受地图缩放影响,就需要换一种方式设置标记图标。
解决方案:使用iconView代替直接设置icon
通过给GMSMarker设置iconView(一个自定义的UIView),可以完全控制标记的尺寸,而且它不会随地图缩放而变化。具体做法如下:
let coordinates = spotCoordinates // 加载图片并处理加载失败的情况 guard let originalImage = UIImage(named: "Dog")?.withRenderingMode(.alwaysTemplate) else { print("无法加载Dog图片") return } for coord in coordinates { let position = CLLocationCoordinate2D(latitude: coord.latitude, longitude: coord.longitude) let marker = GMSMarker(position: position) // 创建固定尺寸的UIImageView承载图标 let iconSize = CGSize(width: 30, height: 30) // 自定义你需要的尺寸 let iconView = UIImageView(frame: CGRect(origin: .zero, size: iconSize)) iconView.image = originalImage iconView.tintColor = .systemBlue // 如果你用了alwaysTemplate模式,可设置tint颜色 // 将自定义view设置为标记的iconView marker.iconView = iconView marker.map = spotsParentView.mapView }
额外提示
- 如果需要让标记在不同缩放级别有动态尺寸,可以监听地图的
GMSMapViewDelegate中的mapView(_:didChange:)方法,根据当前相机的zoom级别调整iconView的frame。 - 始终记得处理图片加载失败的情况,避免因图片不存在导致的崩溃。
这样设置后,你的自定义标记就会保持固定的尺寸,不管怎么缩放或滚动地图都不会变大啦!
内容的提问来源于stack exchange,提问作者Artem
相关产品推荐
相关产品推荐

