7

Ich verwende eine 2013 Version von Google Maps SDK für iOS. Ich möchte den standardmäßigen blauen Punkt für den aktuellen Standort mit einem anderen Symbol oder pulsierenden Kreisen anpassen.Google Maps blauen Punkt für aktuellen Standort anpassen

Ich weiß, dass wir das mit mapView:viewForAnnotation: in MKMapView tun können, aber ich kann nicht herausfinden, wie man es mit Google Maps macht.

Antwort

11

Es gibt keine Möglichkeit, dies mit der aktuellen Version des SDK (1.4.3) zu tun, und tatsächlich gibt es ein offenes Problem mit dieser Anfrage: Look here.

Als eine Arbeit um, können Sie die Standard-Schaltfläche mit auszublenden:

_map.myLocationEnabled = NO; 

Dann erstellen Sie eine benutzerdefinierte GMSMarker

GMSMarker *pointMarker = [GMSMarker markerWithPosition:currentPosition]; 
pointMarker.icon = [UIImage imageNamed:@"YourImage"]; 
pointMarker.map = _map; 

und die Position der es ändern, um eine CLLocationManager verwenden, so ist es immer zeigen die aktuelle Position. Es ist ein bisschen schwierig, aber ist der einzige Weg, könnte ich denken, dass Sie das erreichen können. Wenn Sie ein vollständigeres Beispiel benötigen, lassen Sie es mich wissen.

+0

Ja, ich habe es versucht, aber es zeigt mehr als eine Markierung um Benutzer aktuellen Standort. Bitte geben Sie einen ausgefeilteren Code. –

+0

Sorry, ich habe Gmap schon lange nicht mehr benutzt, ich bin mir nicht sicher, ob diese Antwort noch gültig ist. Wie auch immer, wenn Sie ein Problem haben, stellen Sie bitte eine neue Frage, ich kann Ihnen bei der Änderung einer alten Antwort nicht helfen. – Raspu

+0

Danke für Ihre Antwort. Es hilft mir sehr. –

0

Swift 4

class MasterMapViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate { 


    let currentLocationMarker = GMSMarker() 


    override func loadView() { 

     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 = CLLocationCoordinate2D(latitude: lastLocation.coordinate.latitude, longitude: lastLocation.coordinate.longitude) 

    } 


} 

Dies ist nicht eine sehr attraktive Alternative für mich, weil die Bewegung des Markers ruckelt und die ständige Aktualisierung ihrer Position auf der Karte kann eine erhebliche Leistung ziehen sein. Aber so ist es gemacht.