Created
May 23, 2020 17:15
-
-
Save alexnikol/861d213eda0d58e7708842f9d551ba09 to your computer and use it in GitHub Desktop.
Direction Marker and Google Maps
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ViewController: UIViewController { | |
var mapView: GMSMapView! //Google Map View | |
var userMarker: GMSMarker! //Our Car marker | |
private let locationManager = CLLocationManager() | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
setupMap() | |
createMarker() | |
locationManager.delegate = self | |
locationManager.desiredAccuracy = kCLLocationAccuracyBest | |
locationManager.requestAlwaysAuthorization() | |
locationManager.startUpdatingLocation() | |
} | |
func setupMap() { | |
let camera = GMSCameraPosition(latitude: 37.3328113, longitude: -122.0411792, zoom: 15.0) //Start point for Map | |
let map = GMSMapView(frame: view.bounds, camera: camera) //Creation of Google Map View | |
self.view.addSubview(map) | |
mapView = map | |
} | |
func createMarker() { | |
let marker = GMSMarker() | |
marker.iconView = UserMarker(frame: CGRect(x: 0, y: 0, width: 48, height: 48)) //Our Custom Marker | |
marker.map = mapView //Draw this marker on the Google Map View | |
userMarker = marker | |
} | |
func updateMarkerWith(position: CLLocationCoordinate2D, angle: Double) { | |
userMarker.position = position | |
guard angle >= 0 && angle < 360 else { | |
return | |
} | |
let angleInRadians: CGFloat = CGFloat(angle) * .pi / CGFloat(180) //Form degrees to radians transformation | |
userMarker.iconView?.transform = CGAffineTransform.identity.rotated(by: angleInRadians) //Rotation of the marker | |
} | |
} | |
extension ViewController: CLLocationManagerDelegate { | |
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { | |
guard let location = locations.last else { | |
return | |
} | |
let point = CLLocationCoordinate2D(latitude: location.coordinate.latitude, | |
longitude: location.coordinate.longitude) | |
updateMarkerWith(position: point, angle: location.course) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment