I'm using a 2013 version of Google Maps SDK for iOS. I would like to customize the default blue dot for current location with another icon or pulsing circles around.
I know we can do that with mapView:viewForAnnotation:
in MKMapView, but I can't found out how to do it with Google Maps.
There is no way to do this with current version of the SDK (1.4.3), and actually there is an open issue with this request: Look here.
As a work around, you can hide the default button with:
_map.myLocationEnabled = NO;
Then create a custom GMSMarker
GMSMarker *pointMarker = [GMSMarker markerWithPosition:currentPosition];
pointMarker.icon = [UIImage imageNamed:@"YourImage"];
pointMarker.map = _map;
And change the position of it using a CLLocationManager
, so it always show the current position. It's a bit tricky but is the only way, I could think, that you can achieve this. If you need a more complete example let me know.
Swift 4
class MasterMapViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate {
let currentLocationMarker = GMSMarker()
override func viewDidLoad() {
super.viewDidLoad()
addCurrentLocationMarker()
}
func addCurrentLocationMarker() {
let currentLocationMarkerView = UIView()
currentLocationMarkerView.frame.size = CGSize(width: 40, height: 40)
currentLocationMarkerView.layer.cornerRadius = 40 / 4
currentLocationMarkerView.clipsToBounds = true
let currentLocationMarkerImageView = UIImageView(frame: currentLocationMarkerView.bounds)
currentLocationMarkerImageView.contentMode = .scaleAspectFill
currentLocationMarkerImageView.image = UIImage(named: "masterAvatar")
currentLocationMarkerView.addSubview(currentLocationMarkerImageView)
currentLocationMarker.iconView = currentLocationMarkerView
currentLocationMarker.isTappable = false
currentLocationMarker.map = mapView
}
// location manager delegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let lastLocation = locations.last!
currentLocationMarker.position = lastLocation.coordinate
}
}
Use this only as a starting point! This is not an attractive alternative because the constant updating of the marker's position on the map comes with a performance hit. If you were to go this route, find a way not to constantly update the marker's position from the location manager delegate.
For Swift 4.0
When you setup your GMSMapView:
mapView.isMyLocationEnabled = false
And when user location is updated:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocationMarker = GMSMarker(position: location.coordinate)
userLocationMarker.icon = UIImage(named: "yourImageName")
userLocationMarker.map = mapView
}
来源:https://stackoverflow.com/questions/18331086/customize-google-maps-blue-dot-for-current-location