【问题标题】:How to get particular Marker id in Google Map iOS SDK如何在 Google Map iOS SDK 中获取特定的 Marker id
【发布时间】:2015-08-31 03:11:47
【问题描述】:

我正在开发谷歌地图 iOS sdk。在这里,我在不同的位置坐标中创建了多个标记。

现在我需要为所有标记添加诸如 TAG 之类的标识符,以便对特定标记执行操作。

如果 TAG 或其他标识符选项在 google map iOS sdk 中不可用,请建议我如何存档。

提前致谢。

【问题讨论】:

    标签: ios objective-c google-maps google-maps-sdk-ios


    【解决方案1】:

    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
    

    这不是比 marker.userData = someBranch 更清晰可读吗??

    【讨论】:

      【解决方案2】:

      我所做的是简单地继承 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;
      }
      

      【讨论】:

      • 使用自定义 GMSMarker 类,我使用 markerID 创建标记。但是如何使用 markerID 获得特定的标记?例如:GMSMarker *marker = (GMSMarker *)[self.mapView viewWithMarkerID:100];
      • 我认为如何做到这一点很清楚,我会更新我的答案
      • 当我从 GMSMarker 子类化然后将 mapView 分配给标记的地图时,应用程序将崩溃。因为无法获得子类的边界。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2021-07-03
      • 1970-01-01
      • 2021-01-31
      • 2020-01-08
      • 2013-10-15
      • 2017-10-08
      相关资源
      最近更新 更多