Change Google Maps' Selected Marker or change marker's color?

I am wondering if there is a way to change the color or image of the selected marker and then change it back when it is not selected anymore. I see that Yelp, which uses Apple Maps, changes the color/image of the selected marker and then back to the original once that one is no longer selected and was wondering if the Google Map iOS SDK had something similar or if someone has come across this problem and found a solution.

What I have tried:

  • Current Location in Google Maps with swift
  • How can I launch the Google Maps iPhone application from within my own native application?
  • Linker errors in a Swift project with Google Maps for iOS added via CocoaPods
  • How to plot the markers in google maps from a dictionay in ios?
  • GoogleMap API Gives Wrong Coordinates for Direction between two Points
  • Do marker animations exist on GoogleMaps SDK for iOS?
  • I have looked through Google’s Documentation on Markers (found here) and see that they have marker.opacity which changes the opacity and marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]]; which changes the marker’s color.

    I have tried to manually change it in -(UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker; by adding this line marker.icon = [GMSMarker markerImageWithColor: [UIColor differentColor]]; or this line marker.icon = [UIImage imageNamed:@"differentColorImage"]; but when you tap out of the marker/info-window, the image/color remains the same.

    Anyone have any thoughts? Anything helps. Thanks in advance!

    2 Solutions Collect From Internet About “Change Google Maps' Selected Marker or change marker's color?”

    To change icon of marker that selected and for not selected what i did was,
    First I add all the GMSMarker in an array.After that inside delegate function didTapMarker:
    I got selected marker and change the icon of that marker

         - (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;
           }
    

    This is working for me.

    Just incase anyone comes and sees this, I resolved this issues by using my own method and own variables. I used two global variables which are: GMSMarker *selectedMarker and BOOL isMarkerActive. Inside of mapview:markerInfoWindow I check if the marker is active, if it is that means there was one active before this one so go unhighlight that marker. After that I set the current marker is the selected marker, set the bool to true and then highlight that marker, as shown below.

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

    Inside the highlightMarker method I check if the sent marker I sent is equal to the map’s selected marker

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

    Do the same in the unhighlightMarker method

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

    Lastly, I check for taps on the map and see if the bool is true and that the map’s selected marker does not equal 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;
            }
        }
    }
    

    Hope this helps anyone else out there.