Oscar JS
Oscar JS

Reputation: 67

Calling mapView(_:viewFor:) when user location changes

I want to have the user location being shown as a custom image (not the blue beacon). I also want that whenever the user location changes its coordinates, this custom image is rotated accordingly to represent the user course. In order to achieve that, I implemented the code below. It is being called with annotation type userLocation when the app is started, so that the user location custom image is being shown fine. The problem is that when I simulate a change in user location coordinates, the delegate mapView(_:viewFor:) method is never called again with an annotation type userLocation, so the image is never rotated. (Note: the UIImage rotateImage(by:) is a custom method).

Is there some means to call mapView(_:viewFor:) so that I can update the image annotation for user location when user location changes? Thanks for any help.

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation.isEqual(mapView.userLocation) {
        // Annotation image for user location
        let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: nil)
        annotationView.image = UIImage(named: "UserLocationImage.png")?.rotateImage(by: currentCourse)
        return annotationView  
    }
}

Upvotes: 0

Views: 160

Answers (1)

Amir Sk
Amir Sk

Reputation: 158

Use CLLocationManagerDelegate https://developer.apple.com/documentation/corelocation/cllocationmanagerdelegate Implement this protocol in your code, and put your mapView function into its locationManager(_:didUpdateLocations:) method.

Upvotes: 1

Related Questions