简体   繁体   中英

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

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:

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!

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM