问题
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.
回答1:
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.
回答2:
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.
回答3:
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