如何使用 Swift 启用 Google 地图缩放控件

How to enable Google Maps zoom controls using Swift

我正在阅读 Google maps for swift 的文档,但与 Android 相比,我没有找到在我的地图上设置 'Zoom Controls' 的方法,默认情况下是禁用的。

是否存在使用 Google Maps iOS SDK 显示控件的方法?

我认为@Scriptable 是正确的,文档中没有 Zoom Controls 部分 iOS SDK

好吧,我制作了自己的(非常基本的)控件。

保持这个顺序(MapViewButtonButton),否则你看不到按钮。

第一个,您必须 select 您的 UIVIew 并将 class 更改为 GSMMapView

并且,在 MapViewController

import Foundation
import UIKit
import GoogleMaps

class MapViewController: UIViewController {

    struct Place {
        let id: Int
        let name: String
        let lat: CLLocationDegrees
        let lng: CLLocationDegrees
        let icon: String
    }

    @IBOutlet weak var mapView: GMSMapView!
    var markerDict: [Int: GMSMarker] = [:]

    var zoom: Float = 15

    override func viewDidLoad() {
        super.viewDidLoad()

        let camera = GMSCameraPosition.camera(withLatitude: 34.1381168, longitude: -118.3555723, zoom: zoom)
        self.mapView.camera = camera

        do {
            if let styleURL = Bundle.main.url(forResource: "style", withExtension: "json") {
                mapView.mapStyle = try GMSMapStyle(contentsOfFileURL: styleURL)
            } else {
                NSLog("Unable to find style.json")
            }
        } catch {
            NSLog("One or more of the map styles failed to load. \(error)")
        }

        let places = [
            Place(id: 0, name: "MrMins", lat: 34.1331168, lng: -118.3550723, icon: "i01"),
        ]

        for place in places {
            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: place.lat, longitude: place.lng)
            marker.title = place.name
            marker.snippet = "Custom snipet message \(place.name)"
            marker.appearAnimation = kGMSMarkerAnimationPop
            //marker.icon = self.imageWithImage(image: UIImage(named: place.icon)!, scaledToSize: CGSize(width: 35.0, height: 35.0))
            marker.map = self.mapView

            markerDict[place.id] = marker
        }

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    @IBAction func btnZoomIn(_ sender: Any) {
        zoom = zoom + 1
        self.mapView.animate(toZoom: zoom)
    }

    @IBAction func btnZoomOut(_ sender: Any) {
        zoom = zoom - 1
        self.mapView.animate(toZoom: zoom)
    }


}

你应该抓住当前的缩放值,因为如果你硬编码缩放值,当用户在通过手势缩小后按下按钮时,用户将不仅使用按钮而且使用按钮和手势,你将缩放到旧的缩放值(非常靠近地图)

要解决这个问题,您应该在此处捕捉缩放值(在 GMSMapViewDelegate 中)

func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    zoom = mapView.camera.zoom
}

所有代码将如下所示

    class A: UIViewController {
      var zoom: Float = 15

    @IBAction func ZoomInButtonPressed(_ sender: UIButton) {
        let nextZoom = zoom + 1
        mapView.animate(toZoom: nextZoom)
    }
}

extension A: GMSMapViewDelegate { 
    func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
        zoom = mapView.camera.zoom
    }
}