1

我必须实现自定义谷歌地图 GMSMarker。我参考了谷歌文档来创建自定义标记

我面临的问题是,每当我想更新标记时,都需要花费大量时间(1 秒 - 3 秒)来更新,这会降低用户体验。我没有创建多个标记我在当前实现中只有 2 个标记。

这是我用来创建标记的代码:

- (void)showMarker 
{
     gmsMapView = [GMSMapView mapWithFrame:self.mapView.bounds camera:camera];
     CLLocationCoordinate2D position = { latitude, longitude };
     marker = [GMSMarker markerWithPosition:position];
     marker.flat = YES;
     marker.iconView = [self setCustomIcon];
     marker.map = gmsMapView;
     marker.userData = slot;
}
- (UIView *)setCustomIcon
{
     Marker *view =  [[[NSBundle mainBundle] loadNibNamed:@"Marker" owner:self options:nil] objectAtIndex:0];
     /*
       few lines of code to set data
     */    
     return view;
}

笔记 :

  1. 我知道我可以创建自定义信息窗口,但这不是我想要的。

  2. GMSMarker 有一个属性tracksViewChanges,当设置为 NO 时,它会停止跟踪标记视图中的更改。但我无法将其设置为 NO,因为我需要在点击它时更新视图。

  3. 这个问题只有在我设置iconView标记的属性时才会出现,如果我只是使用icon属性并为其设置图像,它工作正常。

编辑:更新标记代码

- (void)updateMarker:(GMSMarker *)localMarker
{
   dispatch_async(dispatch_get_main_queue(), ^{
     self.previousSelectedMarker.iconView = [self setCustomIcon];
     localMarker.iconView = [self setCustomIcon];
     self.previousSelectedMarker = localMarker;
     self.slot = localMarker.userData;
      // update data
  });
}

下图显示了当我点击标记并更新其图像时会有多少延迟:

问题

4

0 回答 0