使用Google Map SDK子视图(Swift)中心地图和添加标记

时间:2016-06-14 18:32:14

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

我无法将Google地图置于中心位置,并在将其作为IBOutlet连接的子视图时添加标记。我试图让它工作,感觉就像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

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

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

3 个答案:

答案 0 :(得分:9)

当然,在我向这里的每个人提问之后,我有一个顿悟并想出来了!我不需要创建新的GMSMapView,因为已经使用autolayout完成了。我只需要访问该GMSMapView Outlet的摄像机变量来设置位置。

以下代码:

 // 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()函数中的视图出口。所以你可以设置mapView边界  func viewDidAppear(动画: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)
        }
  }

答案 2 :(得分:0)

您需要在 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)
}