GMSMarker icon from center (iOS)
You can change the start position of your marker icon with the property groundAnchor
.
Google Maps SDK for iOS documentation:
The ground anchor specifies the point in the icon image that is anchored to the marker's position on the Earth's surface. This point is specified within the continuous space [0.0, 1.0] x [0.0, 1.0], where (0,0) is the top-left corner of the image, and (1,1) is the bottom-right corner.
Example:
The below example rotates the marker 90°. Setting the groundAnchor property to 0.5,0.5 causes the marker to be rotated around its center, instead of its base.
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);CLLocationDegrees degrees = 90;GMSMarker *london = [GMSMarker markerWithPosition:position];london.groundAnchor = CGPointMake(0.5, 0.5);london.rotation = degrees;london.map = mapView_;
I figured out how to do it after reading Google Maps Documentation very closely. I believe this is how it was intended to be done.
UIImage *markerIcon = [UIImage imageNamed:@"markericon.png"];markerIcon = [markerIcon imageWithAlignmentRectInsets:UIEdgeInsetsMake(0, 0, (markerIcon.size.height/2), 0)];self.marker.icon = markerIcon;
In Swift 5
let marker: GMSMarker = GMSMarker() // Allocating Marker marker.title = "Your location" // Setting title marker.snippet = "Sub title" // Setting sub title marker.icon = UIImage(named: "radio") // Marker icon marker.appearAnimation = .pop // Appearing animation. default marker.position = CLLocationCoordinate2D.init(latitude: 26.8289443, longitude: 75.8056178) marker.groundAnchor = CGPoint(x: 0.5, y: 0.5) // this is the answer of this question DispatchQueue.main.async { // Setting marker on mapview in main thread. marker.map = self.googleMapView // Setting marker on Mapview }