更改Google地图的选定标记或更改标记的颜色?[iOS的]

Chr*_*ris 4 iphone google-maps objective-c google-maps-markers ios

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

我尝试过的:

我查看了谷歌关于标记的文档(在这里找到)并看到它们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"];但当您点击标记/信息窗口时,图像/颜色保持不变.

有人有什么想法?一切都有帮助.提前致谢!

Sef*_*efi 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;
       }
Run Code Online (Sandbox Code Playgroud)

这对我有用.


Chr*_*ris 5

只是因为任何人来看看这个,我通过使用我自己的方法和自己的变量来解决这个问题.我使用了两个全局变量:GMSMarker *selectedMarkerBOOL isMarkerActive.在里面mapview:markerInfoWindow我检查标记是否有效,如果是这意味着在此标记之前有一个有效,所以不要强调该标记.之后,我将当前标记设置为选定标记,将bool设置为true,然后突出显示该标记,如下所示.

if(self.isMarkerActive == TRUE){
    [self unhighlightMarker:self.selectedMarker];
}
self.selectedMarker = marker;
self.isMarkerActive = TRUE;
[self highlightMarker:marker];
Run Code Online (Sandbox Code Playgroud)

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

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

在unhighlightMarker方法中执行相同的操作

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

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

- (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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他任何人.