我正在使用Google Map iOS SDK进行工作。在这里,我在不同的位置坐标上创建了多个标记。
现在,我需要为所有标记添加标识符,例如TAG,以便对特定标记执行操作。
如果Google Map iOS SDK中没有TAG或其他标识符选项,请建议我如何实现它。
提前感谢您。
我正在使用Google Map iOS SDK进行工作。在这里,我在不同的位置坐标上创建了多个标记。
现在,我需要为所有标记添加标识符,例如TAG,以便对特定标记执行操作。
如果Google Map iOS SDK中没有TAG或其他标识符选项,请建议我如何实现它。
提前感谢您。
我的做法是继承GMSMarker,然后像这样添加我需要的任何数据。我猜这是你最好和最容易的选择。
@interface ATGoogleMapsSelectiveMarker : GMSMarker
@property (nonatomic) int markerID;
@property (nonatomic) int order;
@property (strong, nonatomic) NSObject* referenceObject;
@property (nonatomic) BOOL selected;
@end
编辑:
我认为这很清楚,但我会继续说明如何获取数据...当您创建标记并将其添加到地图时,您创建ATGoogleMapsSelectiveMarker,并在填充所需内容后将其添加到地图上,然后注册任何您想要作为委托的类,该类实现GMSMapViewDelegate并实现此方法。
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
// Here you are sure that your marker object is of type ATGoogleMapsSelectiveMarker but it won't harm to double check
if ([marker isKindOfClass:[ATGoogleMapsSelectiveMarker class]]) {
ATGoogleMapsSelectiveMarker* parsedMarker = (ATGoogleMapsSelectiveMarker*)marker;
NSLog(@"%d", parsedMarker.markerId);
}
return YES;
}
Swift解决方案:
您可以通过为标记设置键的值来添加标识符或任何内容:
marker.setValue("20", forKey: "id")
您可以稍后使用以下方式获取:
marker.value(forKey: "id")
或者
我的解决方法是创建一个GMSMarker的扩展,并使用userData属性来使GMSMarker符合我的需求。对我来说,我想要为每个标记添加Branch类的实例(某些公司的分支机构标记),这是我实现的方式:
extension GMSMarker {
var branch: Branch {
set(branch) {
self.userData = branch
}
get {
return self.userData as! Branch
}
}
}
当我设置标记属性时,我会这样设置:
marker.branch = someBranch