Swift MKMapView laisser Tomber une Épingle Annotation à l'Emplacement Actuel
Je suis à la recherche pour être en mesure de demander l'application utilisateur pour son emplacement actuel et un code pin pour être automatiquement supprimés. Voici mon code pour l'accaparement de l'emplacement actuel, mais j'ai du mal à comprendre comment je peux placer un repère pour l'emplacement actuel.
import UIKit
import MapKit
import CoreLocation
class MapVC: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var map: MKMapView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
//User's location
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
if #available(iOS 8.0, *) {
locationManager.requestAlwaysAuthorization()
} else {
//Fallback on earlier versions
}
locationManager.startUpdatingLocation()
//add gesture recognizer
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(MapVC.mapLongPress(_:))) //colon needs to pass through info
longPress.minimumPressDuration = 1.5 //in seconds
//add gesture recognition
map.addGestureRecognizer(longPress)
}
//func called when gesture recognizer detects a long press
func mapLongPress(_ recognizer: UIGestureRecognizer) {
print("A long press has been detected.")
let touchedAt = recognizer.location(in: self.map) //adds the location on the view it was pressed
let touchedAtCoordinate : CLLocationCoordinate2D = map.convert(touchedAt, toCoordinateFrom: self.map) //will get coordinates
let newPin = MKPointAnnotation()
newPin.coordinate = touchedAtCoordinate
map.addAnnotation(newPin)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last! as CLLocation
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
//set region on the map
self.map.setRegion(region, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
}
OriginalL'auteur Kevin | 2016-11-30
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez ajouter des broches à l'emplacement de l'utilisateur, vous pouvez le faire en
didUpdateLocations
délégué méthode comme ceciCréer une variable globale pour votre nip
Donc à chaque fois que l'utilisateur se déplace vers un nouvel emplacement de la précédente pin sera supprimé et un nouveau code pin sera ajouté à la mise à jour de localisation.
mapView
est le nom de la variable deMapView
le remplacer par votreMapView
variable qui estmap
, j'ai également mis à jour dans ma réponseAh, je vois. Cela a corrigé l'erreur. Comment puis-je tester? Quand je le lance avec la carte, il ne reconnaît pas l'application de l'emplacement actuel.
Tout d'abord, vous devez ajouter "NSLocationAlwaysUsageDescription" dans votre fichier plist, ajouter un point d'arrêt sur didUpdateLocation méthode et de vérifier si cette méthode appelée ou non
J'ai déjà ajouté NSLocationAlwaysUsageDescription dans mon plist, et j'ai ajouté le point d'arrêt, mais je n'ai pas remarqué un changement, donc je ne pense pas que la méthode est appelée.
OriginalL'auteur Rajat
Vous devez d'abord ajouter l'annotation dans
didUpdateLocations
méthode, puis à chaque fois que l'annotation est ajoutée puisviewForAnnotation
est appelé ainsi, voici le code et la méthode pour ajouter des broches dans l'emplacement actuel de l'utilisateur ://Ajout de l'Annotation sur l'Emplacement Actuel de
//Ajout d'image à l'utilisateur l'emplacement actuel de pin
N'hésitez pas à demander si toute autre question.
OriginalL'auteur Shobhakar Tiwari