【问题标题】:Center Map and Add Marker with Google Map SDK Subview (Swift)使用 Google Map SDK 子视图 (Swift) 居中地图并添加标记
【发布时间】:2016-06-14 18:32:13
【问题描述】:

当它是作为 IBOutlet 连接的子视图时,我无法让 Google 地图居中并添加标记。我试图让它发挥作用,感觉就像有 20 种不同的方式,但我被卡住了,所以不胜感激任何帮助或指导。

代码设置非常简单,如下所示:

//Map view outlet
@IBOutlet weak var googleMapView: GMSMapView!

override func viewDidLoad() {
    super.viewDidLoad()

// Google Map View Setup
    let camera = GMSCameraPosition.cameraWithLatitude(-33.86, longitude: 151.20, zoom: 6)
    let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
    mapView.myLocationEnabled = true

    self.googleMapView = mapView

    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20)
    marker.title = "Sydney"
    marker.snippet = "Australia"
    marker.map = mapView

如果视图是整个视图控制器,我可以通过将 self.googleMapView 更改为 self.view 来使其工作,但我无法弄清楚如何将其正确连接到 googleMapView 插座。谢谢!

我尝试使用为此 similar question 提供的帮助,但没有明确回答,因为插座和变量都是 mapView,我无法让它工作。

【问题讨论】:

    标签: ios swift google-maps-sdk-ios


    【解决方案1】:

    当然,在我向这里的每个人提出问题后,我顿悟并想通了!我不需要创建新的 GMSMapView,因为这已经通过自动布局完成。我只需要访问 GMSMapView 插座的相机变量来设置位置。

    代码如下:

     // Google Map View Setup
        let camera = GMSCameraPosition.cameraWithLatitude(-33.86, longitude: 151.20, zoom: 6)
        self.googleMapView.myLocationEnabled = true
    
        self.googleMapView.camera = camera
    
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2DMake(-33.86, 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = googleMapView
    

    【讨论】:

    • 我遇到了同样的问题,这让我看到了光明.. +1
    【解决方案2】:

    我认为您的 mapView 边界未正确设置为 viewDidLoad() 函数中的视图出口。所以你可以从 func viewDidAppear(animated: Bool)。我遇到了同样的问题,谷歌地图正确地以 self.view 为中心,而不是以自定义视图边界为中心。我们找到了在 func viewDidLoad() 上,我们无法获得矩形边界的原因正确的视图。

    override func viewDidAppear(animated: Bool) {
            super.viewDidAppear(animated)
            googleMapsView = GMSMapView()
            googleMapsView?.frame = mapView.bounds
            googleMapsView?.myLocationEnabled = true
            if let googleMapView = googleMapsView {
                mapView.addSubview(googleMapView)
            }
      }
    

    【讨论】:

      【解决方案3】:

      您需要在 viewDidAppear() 中设置标记和重新定位,因为您的 GMSMapView 边界已在此函数中正确计算。

      例子:

      override func viewDidAppear(_ animated: Bool) {
          super.viewDidAppear(animated)
      
          // Add Marker
          let marker = GMSMarker()
          marker.title = "Marker Title Here"
          marker.position = CLLocationCoordinate2DMake(location.latitude, location.longitude)
          marker.map = mapView
      
          // Center camera to marker position
          mapView.camera = GMSCameraPosition.camera(withTarget: marker.position, zoom: 15)
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 2017-05-15
        • 2012-03-07
        • 1970-01-01
        • 2017-04-11
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        相关资源
        最近更新 更多