【问题标题】:Change Google Maps' Selected Marker or change marker's color? [iOS]更改 Google 地图的选定标记或更改标记的颜色? [iOS]
【发布时间】:2014-03-22 04:43:40
【问题描述】:

我想知道是否有一种方法可以更改所选标记的颜色或图像,然后在不再选择时将其更改回来。我看到使用 Apple Maps 的 Yelp 会更改所选标记的颜色/图像,然后在不再选择该标记后返回原始标记,并且想知道 Google Map iOS SDK 是否有类似的东西,或者是否有人遇到过这个问题并找到了解决方案。

我尝试过的:

我查看了谷歌关于标记的文档 (found here),发现他们有 marker.opacity 改变不透明度和 marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]]; 改变标记颜色。

我尝试通过添加此行marker.icon = [GMSMarker markerImageWithColor: [UIColor differentColor]]; 或此行marker.icon = [UIImage imageNamed:@"differentColorImage"]; 手动更改-(UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker;,但是当您点击标记/信息窗口时,图像/颜色保持不变。

有人有什么想法吗?任何事情都有帮助。提前致谢!

【问题讨论】:

    标签: ios iphone objective-c google-maps google-maps-markers


    【解决方案1】:

    要更改已选择和未选择的标记图标,我所做的是, 首先,我将所有 GMSMarker 添加到一个数组中。之后在委托函数 didTapMarker 中: 我选择了标记并更改了该标记的图标

         - (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker
           {
             marker.icon=[UIImage imageNamed:@"selectedicon.png"];//selected marker
    
               for (int i=0; i<[markerArray count]; i++) 
                {
                 GMSMarker *unselectedMarker=markerArray[i];
            //check selected marker and unselected marker position
                 if(unselectedMarker.position.latitude!=marker.position.latitude &&    unselectedMarker.position.longitude!=marker.position.longitude)
                {
                    unselectedMarker.icon=[UIImage imageNamed:@"unselectedicon.png"];
                } 
              }
    
    
             return NO;
           }
    

    这对我有用。

    【讨论】:

      【解决方案2】:

      万一有人看到这个,我使用自己的方法和自己的变量解决了这个问题。我使用了两个全局变量:GMSMarker *selectedMarkerBOOL isMarkerActive。在mapview:markerInfoWindow 内部,我检查标记是否处于活动状态,如果是,则表示在此之前有一个活动,因此请取消突出显示该标记。之后我将当前标记设置为选中标记,将 bool 设置为 true,然后突出显示该标记,如下所示。

      if(self.isMarkerActive == TRUE){
          [self unhighlightMarker:self.selectedMarker];
      }
      self.selectedMarker = marker;
      self.isMarkerActive = TRUE;
      [self highlightMarker:marker];
      

      在 highlightMarker 方法中,我检查发送的标记是否等于地图的选定标记

      -(void)highlightMarker:(GMSMarker *)marker{
          if(self.mapView.selectedMarker isEqual:marker]){
              marker.icon = [UIImage imageNamed:@"marker-selected-icon"];
          }
      }
      

      在 unhighlightMarker 方法中做同样的事情

      -(void)unhighlightMarker:(GMSMarker* )marker{
          marker.icon = [UIImage imageNamed:@"marker-icon"];
      }
      

      最后,我检查地图上的水龙头,看看 bool 是否为真,以及地图的选定标记不等于 nil

      - (void)mapView:(GMSMapView *)amapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate{
          if(self.isMarkerActive == TRUE){
              if(amapView.selectedMarker != nil){
                  self.isMarkerActive = FALSE;
                  [self unhighlightMarker:self.selectedMarker];
                  self.selectedMarker = nil;
                  amapView.selectedMarker = nil;
              }
          }
      }
      

      希望这对其他人有帮助。

      【讨论】:

      • 这是一个绝妙的解决方案。谢谢。
      • 使用这个方法我们可以高亮和取消高亮多个标记吗?假设我有 5 个标记,并且我选择了其中的 3 个,现在我想取消突出显示其中的任何一个,这可能吗?
      • @Aneesh 你应该可以。必须稍微更新一下逻辑,但我不明白为什么不这样做。我会制作一个带有标记的数组。用于遍历标记列表并标记列表中的标记。
      • @Chris 我已经以其他方式工作了。我没有设置布尔值,而是使用 marker.info 属性来设置值。就像marker.userdata = @"Selected" 一样,用于使标记被选中,同样的方式也用于未选中。通过检查 marker.userdata 的值,我现在可以突出显示标记。
      • @Aneesh 这对我来说听起来也不错。很高兴它对你有用。
      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 2021-09-22
      相关资源
      最近更新 更多