使用 Google 地图 SDK 子视图 (Swift) 居中地图并添加标记
Center Map and Add Marker with Google Map SDK Subview (Swift)
当它是作为 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 插座.谢谢!
我尝试使用为此 提供的帮助,但没有明确回答,因为出口和变量都是 mapView,我无法让它工作。
当然,在我向这里的每个人提出问题后,我突然顿悟并想通了!我不需要创建新的 GMSMapView,因为这已经通过自动布局完成了。我只需要访问那个 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
我认为您的 mapView 边界未正确设置为 viewDidLoad() 函数中的视图出口。所以你可以设置 mapView 边界
func viewDidAppear(animated: Bool)。我遇到了同样的问题,即 google 地图正确地以 self.view 为中心,而不是以自定义视图为中心 bounds.We 找到了 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)
}
}
您需要在 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)
}
当它是作为 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 插座.谢谢!
我尝试使用为此
当然,在我向这里的每个人提出问题后,我突然顿悟并想通了!我不需要创建新的 GMSMapView,因为这已经通过自动布局完成了。我只需要访问那个 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
我认为您的 mapView 边界未正确设置为 viewDidLoad() 函数中的视图出口。所以你可以设置 mapView 边界 func viewDidAppear(animated: Bool)。我遇到了同样的问题,即 google 地图正确地以 self.view 为中心,而不是以自定义视图为中心 bounds.We 找到了 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)
}
}
您需要在 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)
}