我正在尝试创建一个包含GMSMapView的UITableViewCell,其中GMSMarker位于当前位置的中心。
问题是标记总是出现在当前位置的左上角,我不知道如何解决问题。
我尝试按照以下步骤操作:Implementing a Google Map with UItableviewCell
这是我来自cellForRowAt的代码:
let locationCell = tableView.dequeueReusableCell(withIdentifier: "activityLocationCell") as! ActivityLocationCell
let latitude = CLLocationDegrees(activity.coordinates![0])
let longitude = CLLocationDegrees(activity.coordinates![1])
let position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
locationCell.googleMapView.camera = GMSCameraPosition.camera(withTarget: position, zoom: 15)
let marker = GMSMarker(position: position)
marker.groundAnchor = CGPoint(x: 0.5, y: 0.5)
marker.map = locationCell.googleMapView
return locationCell
以下是我的问题的屏幕截图: marker is at the top left corner of the map
答案 0 :(得分:1)
我有一个非常相似的问题。我通过更改在视图生命周期中配置地图的时间来解决该问题。
就我而言,我使用的是子视图控制器。我在之前 viewWillAppear
之前配置了地图,这导致地图无法正确居中(标记位于左上角)。我将通话移到了viewWillAppear
的之后,并固定了它。
如果您正在使用单元,则可能需要调查视图生命周期而不是控制器生命周期。
这没有写在Google文档的任何地方。
答案 1 :(得分:0)
您必须在其中绘制地图 func viewDidLayoutSubviews()
答案 2 :(得分:0)
尝试在地图准备就绪时创建标记。例如:使用委托。
var ifMapReady: Bool = false
...
...
func mapViewSnapshotReady(_ mapView: GMSMapView) {
ifMapReady = true
}
//Call this method from where ever you want to load map
func updateMap() {
if ifMapReady {
//Load Map
}
}
每当地图图块准备就绪时,将多次调用此委托(例如,地图被刷动或移动等)。因此,我们可以使用布尔值来了解成功加载了地图。基于该值,我们可以在启动时正确加载地图。
答案 3 :(得分:0)
我想再补充一件事。 @Gabriel Cartier 的回答对我有用,对我的代码做了一个额外的更改。
[self->mapView_ animateToCameraPosition:camera];
我换成了
[self->mapView_ setCamera:camera];