我无法将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,我无法让它工作。
答案 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)
}