para mapas funciona apple ios swift3 mkmapview core-location

mapas - Cambiar la dirección del pin en el mapa de iOS



apple maps para pc (1)

Comprender iOS''s conceptos de ubicación iOS''s completamente ayuda a resolver cualquier problema relacionado con AppleMap .

Para mover el mapa Pin o AnnotationView, podemos usar el marco CoreLocation que genera datos relacionados con la ubicación actual de los usuarios.

import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { var locationManager:CLLocationManager! override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager.delegate = self locationManager.startUpdatingHeading() } func locationManager(manager: CLLocationManager!, didUpdateHeading heading: CLHeading!) { // This will print out the direction the device is heading println(heading.magneticHeading) } } }

En el ejemplo anterior, " heading.magneticHeading " mostrará un valor que representa la dirección hacia la que apunta el dispositivo.

  • 0 significa norte
  • 90 significa este
  • 180 significa sur
  • 270 significa oeste
  • todo lo demás en el medio

El siguiente paso es usar esos valores y rotar su AnnotationView o Pin consecuencia.

CGAffineTransformMakeRotation puede ayudar con esto.

Por ejemplo, si desea rotar a la vista de la imagen para apuntar al noreste, lo que requeriría un valor de grado de 45, su código podría verse más o menos así.

float degrees = 45 imageView.transform = CGAffineTransformMakeRotation(degrees * M_PI/180)

Solo tenga en cuenta que CGAffineTransformMakeRotation() espera un valor de radian, en el ejemplo de arriba hemos convertido grados a radianes multiplicando grados con el número de medios círculos.

Los siguientes enlaces realmente útiles:

  • https://stackoverflow.com/a/7634232/3400991

Finalmente resolvió mi problema. Espero que esta respuesta completa ayude a otros también.

  • SWIFT 3.0
  • MKMAPVIEW
  • iOS

Nota: - ( AppleMap integrado, no funciona con GoogleMap )

He hecho lo siguiente:

  1. Mapa implementado e imagen personalizada añadida a la anotación de ubicación del usuario
  2. Cuando el mapa está abierto, muestra la ubicación del usuario en el lugar correcto

Mi requisito:

Cuando el usuario se mueve en una dirección diferente y permanece en el mismo lugar (o lugar diferente), el pin (en la ubicación actual) debe apuntar automáticamente a la dirección en la que señala el usuario.

Por ejemplo: si el barco se muestra en la posición de ubicación del usuario y apunta hacia el norte, pero si el usuario se mueve hacia el oeste, el bote (el pin de ubicación del usuario) también debe apuntar a esa dirección.

Intentó con el siguiente código:

//MARK:Change Direction Methods func angle(fromCoordinate first: CLLocationCoordinate2D, toCoordinate second: CLLocationCoordinate2D) -> Float { let deltaLongitude = second.longitude - first.longitude let deltaLatitude = second.latitude - first.latitude let angle = (.pi * 0.5) - atan(deltaLatitude / deltaLongitude) if deltaLongitude > 0 { return Float(angle) } else if deltaLongitude < 0 { return Float(angle) + .pi } else if deltaLatitude < 0 { return .pi } return 0.0 } //Animate direction of User Location func animateUserLocation() { //Old Coordinate (PLAT - Previous Lat , PLON - Previous Long) let oldLocation = CLLocationCoordinate2D(latitude: UserDefaults.standard.value(forKey: "PLAT") as! CLLocationDegrees, longitude: UserDefaults.standard.value(forKey: "PLON") as! CLLocationDegrees) //New Coordinate (PLAT - Current Lat , PLON - Current Long) let newLocation = CLLocationCoordinate2D(latitude: UserDefaults.standard.value(forKey: "LAT") as! CLLocationDegrees, longitude: UserDefaults.standard.value(forKey: "LON") as! CLLocationDegrees) let getAngle = angle(fromCoordinate:oldLocation, toCoordinate:newLocation) var myAnnotation : RestaurantAnnotation? if annotationArray.count > 0{ myAnnotation = annotationArray[0] } else { return } UIView.animate(withDuration: 2, animations: {() -> Void in myAnnotation?.coordinate = newLocation let annotationView = self.map.view(for: myAnnotation!) annotationView?.transform = CGAffineTransform(rotationAngle: CGFloat(getAngle)) }) //Save Previous lat long UserDefaults.standard.set(UserDefaults.standard.value(forKey: "LAT"), forKey: "PLAT") UserDefaults.standard.set(UserDefaults.standard.value(forKey: "LON"), forKey: "PLON") UserDefaults().synchronize() }

Se animateUserLocation método animateUserLocation método didUpdateLocation pero no tiene suerte.

Amablemente comparta su sugerencia sobre lo que estoy haciendo mal. Gracias por adelantado.