更改谷歌地图选择的标记或更改标记颜色?[iOS]

5
我想知道是否有一种方法可以更改所选标记的颜色或图像,然后在不再选择时将其改回原来的样子。 我发现使用苹果地图的 Yelp 更改所选标记的颜色/图像,然后在不再选择该标记时将其改回原来的样子,我想知道 Google Map iOS SDK 是否有类似的功能,或者是否有人遇到过这个问题并找到了解决方案。
我尝试过:
我查看了 Google 关于标记的文档(在此处找到),发现它们有 marker.opacity 可以更改透明度,marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]]; 可以更改标记的颜色。
我尝试在 -(UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker; 中手动更改它,通过添加以下行:marker.icon = [GMSMarker markerImageWithColor: [UIColor differentColor]];marker.icon = [UIImage imageNamed:@"differentColorImage"]; 但是当您点击标记/信息窗口之外时,图像/颜色仍然保持不变。

有人有什么想法吗?任何帮助都可以。提前感谢!

2个回答

6

以防有人来看到这个问题,我用自己的方法和变量解决了这个问题。 我使用了两个全局变量:GMSMarker *selectedMarkerBOOL isMarkerActive。在mapview:markerInfoWindow中,我检查标记是否处于活动状态,如果是,那么说明在此之前有一个标记处于活动状态,因此取消该标记的突出显示。然后,我将当前标记设置为选定标记,将布尔值设置为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值是否为true,以及地图的选定标记是否不为空。
- (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;
        }
    }
}

希望这能对其他人有所帮助,特别是在IT技术方面。

1
这是一个非常棒的解决方案。谢谢你。 - Enrico Susatyo
使用这种方法,我们可以突出显示和取消突出显示多个标记吗?假设我有5个标记,并且我已经选择了其中的3个,现在我想取消突出显示其中的任何一个,这是可能的吗? - Aneesh
@Aneesh 你应该能够做到。需要稍微更新一下逻辑,但我不知道为什么不能。我会创建一个带有标记的数组。然后使用它来迭代标记列表并标记其中的标记。 - Chris
@Chris,我已经用另一种方法解决了这个问题。我没有使用bool类型,而是使用marker.info属性来设置值。例如,对于选中标记,我使用marker.userdata = @"Selected",取消选中同理。现在,通过检查marker.userdata的值,我可以突出显示标记。 - Aneesh
@Aneesh,这对我来说也听起来不错。很高兴它对你有用。 - Chris

6

要更改所选标记的图标以及未选中的图标,我所做的是:首先将所有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;
       }

这对我来说是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接