Customize Google Maps blue dot for current location

后端 未结 3 439
心在旅途
心在旅途 2020-12-19 02:15

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.

<
相关标签:
3条回答
  • 2020-12-19 02:44

    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.

    0 讨论(0)
  • 2020-12-19 02:59

    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   
    }
    
    0 讨论(0)
  • 2020-12-19 03:00

    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.

    0 讨论(0)
提交回复
热议问题