iOS Swift Google Maps SDK显示特定缩放级别的标记?



我的谷歌地图上有标记,我想在用户缩放到地图上的特定缩放级别后将它们动画化为取消隐藏,然后当用户缩小时,标记再次隐藏。

类似的功能可以在Snapchat的SnapMap中看到。

如何实现这种行为?

在谷歌地图的didChangeposition委托方法中,我可以掌握当前的缩放级别,但是从那里我如何对标记进行动画处理?我没有看到访问当前显示的标记数组的方法。

有什么想法吗?

您可以使用谷歌地图中的"didchange"代表 举个例子:

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
if mapView.camera.zoom >= 16 {
// ADD YOUR MARKERS HERE
} else {
mapView.clear()
}
}

如果您想添加动画,这对我有用

func addMarker() {
self.markerArray.removeAll()
for data in yourDataArray {
let iconView = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
iconView.image = UIImage(named: "YOUR_IMAGE")
iconView.contentMode = .scaleAspectFit
// Creates a marker in the center of the map.
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: data.lat, longitude: data.lng)
marker.iconView = iconView
marker.tracksViewChanges = true
marker.map = mapView
self.markerArray.append(marker)
UIView.animate(withDuration: 0.7,
animations: {
marker.iconView?.frame = CGRect(x: 0, y: 0, width: 29.0, height: 34.0)
}, completion: nil)
}
}
func removeMarker() {
for marker in self.markerArray {
UIView.animate(withDuration: 0.3,
animations: {
marker.iconView?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
}, completion: nil)
}
self.mapView.clear()
self.markerArray.removeAll()
}

这就是我在 Swift 中使用标准 MapKit 的方式:

/**
Tells the mapview delegate the mapview visible region was changed. The window size is checked then
the correct icon size is displayed on the map.
- parameter mapView: The map view whose visible region changed.
- parameter animated: If true, the change to the new region was animated.
*/
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
let zoomWidth = mapView.visibleMapRect.size.width
//print(zoomWidth)
if Int(zoomWidth) < 15000  {
self.mapView.addAnnotations(self.stopArr)
imageZoom = imageArr[1]! //32px
} else if Int(zoomWidth) >= 15000 && Int(zoomWidth) < 20000 {
imageZoom = imageArr[0]! //16px
self.mapView.addAnnotations(self.stopArr)
} else {
imageZoom = imageArr[0]! //16px
self.mapView.removeAnnotations(self.stopArr)
}
}

stopArr 是包含我的注释的数组类型的属性。 Google SDK中可能有类似的东西。查看此页面:https://developers.google.com/maps/documentation/ios-sdk/events。也许mapView:didChangeCameraPosition:做到的?

相关内容

  • 没有找到相关文章

最新更新