视图左上角的GMSMarker图标(iOS)

时间:2017-07-08 19:16:45

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

我正在尝试创建一个包含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

4 个答案:

答案 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];