如何在Google Map iOS SDK中获取特定标记id
我正在谷歌地图iOS sdk上工作。在这里,我在单独的位置坐标中创建多个标记 现在,我需要为所有标记添加标识符,例如标记,以便对特定标记执行操作 如果google map iOS sdk中没有标签或其他标识符选项,请建议我如何存档如何在Google Map iOS SDK中获取特定标记id,ios,objective-c,google-maps,google-maps-sdk-ios,Ios,Objective C,Google Maps,Google Maps Sdk Ios,我正在谷歌地图iOS sdk上工作。在这里,我在单独的位置坐标中创建多个标记 现在,我需要为所有标记添加标识符,例如标记,以便对特定标记执行操作 如果google map iOS sdk中没有标签或其他标识符选项,请建议我如何存档 提前感谢。我所做的就是简单地继承GMSMarker,然后像这样向它添加我需要的任何数据,我想这是您最好、最简单的选择 @interface ATGoogleMapsSelectiveMarker : GMSMarker @property (nonatomic) i
提前感谢。我所做的就是简单地继承GMSMarker,然后像这样向它添加我需要的任何数据,我想这是您最好、最简单的选择
@interface ATGoogleMapsSelectiveMarker : GMSMarker
@property (nonatomic) int markerID;
@property (nonatomic) int order;
@property (strong, nonatomic) NSObject* referenceObject;
@property (nonatomic) BOOL selected;
@end
编辑:
我认为这很清楚,但我会继续讨论如何获取数据。。。当您创建标记并将其添加到地图时,您可以创建一个GoogleMapsSelectiveMarker,并在填充了所需的所有内容后将其添加到地图中,然后将所需的任何类注册为实现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属性时,我将其设置为:
marker.branch = someBranch
这难道不是比marker.userData=someBranch更清晰易读吗???使用定制的GMSMarker类,我用markerID创建了marker。但是如何使用markerID获得特定的标记呢?例如:GMSMarker*marker=(GMSMarker*)[self.mapView view with markerid:100];我想这是很清楚的怎么做,我会更新我的答案当我从GMSMarker子类然后当分配mapView地图的标记,应用程序将崩溃。因为无法得到子类的边界。