2016-06-14 82 views
4

我无法让Google地图居中并在它作为IBOutlet连接的子视图中添加标记。我试图让它工作,感觉像20种不同的方式,但我坚持,所以将不胜感激任何帮助或指导。使用Google地图SDK中心地图和添加标记子视图(Swift)

代码的设置是相当简单如下:

//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和我无法得到它的工作。

回答

8

当然,当我在这里向所有人问这个问题之后,我有了一个顿悟并想通了!我不需要创建一个新的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 
+0

我有同样的问题,这让我看到了光.. +1 –

1

我想你的MapView的界限没有正确设置在viewDidLoad中(视图出口)的功能。因此,您可以设置从 func viewDidAppear(animated:Bool)的mapView边界。我曾面临过谷歌地图正确地集中在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) 
     } 
    }