我必须实现自定义谷歌地图 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;
}
笔记 :
我知道我可以创建自定义信息窗口,但这不是我想要的。
GMSMarker 有一个属性
tracksViewChanges
,当设置为 NO 时,它会停止跟踪标记视图中的更改。但我无法将其设置为 NO,因为我需要在点击它时更新视图。这个问题只有在我设置
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
});
}
下图显示了当我点击标记并更新其图像时会有多少延迟: