我正在开发谷歌地图iOS sdk。在这里,我在不同的位置坐标中创建多个标记。
现在我需要为所有标记添加标识符,例如 TAG,以便对特定标记执行操作。
如果谷歌地图 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解决方案:
我的方法是为 GMSMarker 创建扩展并使用 userData 属性使 GMSMarker 满足我的需要,对我来说,我想添加带有 Branch 类实例的每个标记(带有某些公司分支机构的标记的映射)这就是我所做的:
extension GMSMarker {
var branch: Branch {
set(branch) {
self.userData = branch
}
get {
return self.userData as! Branch
}
}
}
所以当我设置标记属性时,我将其设置如下:
marker.branch = someBranch
这不是比marker.userData = someBranch 更清晰、更具可读性吗?