Um den aktuellen Standort eines Benutzers abzurufen, müssen Sie Folgendes deklarieren:
let locationManager = CLLocationManager()
In müssen viewDidLoad()
Sie die CLLocationManager
Klasse wie folgt instanziieren :
// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
In der CLLocationManagerDelegate-Methode können Sie dann die aktuellen Standortkoordinaten des Benutzers abrufen:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
In der info.plist müssen Sie hinzufügen NSLocationAlwaysUsageDescription
und Ihre benutzerdefinierte Warnmeldung wie; AppName (Demo App) möchte Ihren aktuellen Standort verwenden.
Import MapKit
+CoreLocation
+CLLocationManagerDelegate
in die Klassendefinition aufzunehmen.NSLocationAlwaysUsageDescription
wurde umbenannt inPrivacy - Location Always Usage Description
locationManager
als globale Variable anstelle einer lokalen Variablen inviewDidLoad
Sie sollten diese Schritte ausführen:
CoreLocation.framework
zu BuildPhases hinzufügen -> Binär mit Bibliotheken verknüpfen (ab XCode 7.2.1 nicht mehr erforderlich)CoreLocation
in Ihre Klasse importieren - höchstwahrscheinlich ViewController.swiftCLLocationManagerDelegate
Ihrer Klassendeklaration hinzuNSLocationWhenInUseUsageDescription
undNSLocationAlwaysUsageDescription
plistInit Location Manager:
Benutzerstandort abrufen von:
quelle
Update für iOS 12.2 mit Swift 5
So bin ich
Stellen Sie sicher, dass Sie Ihrem Projekt CoreLocation- und MapKit- Framework hinzugefügt haben (dies ist in XCode 7.2.1 nicht erforderlich).
Hier ist der Ergebnisbildschirm
quelle
Bibliothek importieren wie:
Delegat festlegen:
Nehmen Sie eine Variable wie:
Schreiben Sie auf viewDidLoad () diesen hübschen Code:
Schreiben Sie CLLocation-Delegatmethoden:
Legen Sie nun die Berechtigung für den Zugriff auf den Speicherort fest. Fügen Sie diesen Schlüsselwert in Ihre Datei info.plist ein
100% arbeiten ohne Probleme. GEPRÜFT
quelle
NSLocationWhenInUseUsageDescription = Fordern Sie die Berechtigung zur Verwendung des Standortdienstes an, wenn sich die Apps im Hintergrund befinden. in Ihrer Plist-Datei.
Wenn dies funktioniert, stimmen Sie bitte über die Antwort ab.
quelle
Importieren Sie zuerst die Corelocation- und MapKit-Bibliothek:
erben von CLLocationManagerDelegate an unsere Klasse
Erstellen Sie eine locationManager-Variable. Dies sind Ihre Standortdaten
Erstellen Sie eine Funktion, um die Standortinformationen abzurufen. Seien Sie genau, diese genaue Syntax funktioniert:
Erstellen Sie in Ihrer Funktion eine Konstante für den aktuellen Standort des Benutzers
Wenn Sie die Aktualisierung des Standorts beenden, verhindert dies, dass Ihr Gerät das Fenster ständig ändert, um Ihren Standort während der Bewegung zu zentrieren (Sie können dies weglassen, wenn Sie möchten, dass es anders funktioniert).
Abrufen der Benutzerkoordinate von userLocatin, das Sie gerade definiert haben:
Definieren Sie, wie gezoomt Ihre Karte sein soll:
let span = MKCoordinateSpanMake(0.2,0.2)
Kombinieren Sie diese beiden, um die Region zu erhalten:Stellen Sie nun die Region ein und wählen Sie, ob sie mit Animation dorthin gehen soll oder nicht
Schließen Sie Ihre Funktion
}
Über Ihre Schaltfläche oder auf andere Weise möchten Sie locationManagerDeleget auf self setzen
Lassen Sie nun den Ort anzeigen
Genauigkeit bestimmen
autorisieren:
Um den Ortungsdienst autorisieren zu können, müssen Sie diese beiden Zeilen zu Ihrer Liste hinzufügen
Ort abrufen:
Zeigen Sie es dem Benutzer:
Dies ist mein vollständiger Code:
quelle
Swift 3.0
Wenn Sie den Benutzerstandort nicht in der Karte anzeigen möchten, sondern nur in Firebase oder an einem anderen Ort speichern möchten, führen Sie die folgenden Schritte aus.
Verwenden Sie jetzt CLLocationManagerDelegate auf Ihrem VC und Sie müssen die letzten drei unten gezeigten Methoden überschreiben. Mit diesen Methoden können Sie sehen, wie Sie mit der requestLocation () -Methode den aktuellen Benutzerstandort ermitteln.
Jetzt können Sie den folgenden Anruf codieren, sobald sich der Benutzer bei Ihrer App angemeldet hat. Wenn requestLocation () aufgerufen wird, wird didUpdateLocations oben weiter aufgerufen, und Sie können den Speicherort in Firebase oder an einem anderen Ort speichern.
Wenn Sie GeoFire verwenden, können Sie in der obigen didUpdateLocations-Methode den Speicherort wie folgt speichern
Zu guter Letzt gehen Sie zu Ihrer Info.plist und aktivieren Sie "Datenschutz - Standort bei Verwendung Verwendungsbeschreibung".
Wenn Sie den Simulator zum Testen verwenden, erhalten Sie immer einen benutzerdefinierten Speicherort, den Sie unter Simulator -> Debug -> Speicherort konfiguriert haben.
quelle
Fügen Sie zunächst zwei Frameworks in Ihr Projekt ein
1: MapKit
2: Corelocation (ab XCode 7.2.1 nicht mehr erforderlich)
Definieren Sie in Ihrer Klasse
dann in viewDidLoad Methodencode dies
Vergessen Sie nicht, diese beiden Werte in die plist-Datei aufzunehmen
quelle
Da der Aufruf von
requestWhenInUseAuthorization
asynchron ist, ruft die App dielocationManager
Funktion auf, nachdem der Benutzer die Berechtigung erteilt oder abgelehnt hat. Daher ist es richtig, Ihren Standort, der Code erhält, innerhalb dieser Funktion zu platzieren, sofern der Benutzer die Berechtigung erteilt hat. Dies ist das beste Tutorial dazu, das ich darauf gefunden habe .quelle
Dies ist Ihre Methode zum Laden der Ansicht und enthält in der ViewController-Klasse auch die MapStart-Aktualisierungsmethode wie folgt
Auch vergessen Sie nicht , CoreLocation.FrameWork und MapKit.Framework in einem Projekt hinzuzufügen (nicht mehr notwendig , da die XCode 7.2.1 )
quelle
Verwendung:
Feld in der Klasse definieren
Verwendung in Funktion der Klasse durch einfachen Code:
Klasse:
Vergessen Sie nicht, die "NSLocationWhenInUseUsageDescription" in die info.plist aufzunehmen.
quelle
Muss diesen Code in den erforderlichen ViewController schreiben.
quelle
Hier ist ein Beispiel zum Kopieren und Einfügen, das für mich funktioniert hat.
http://swiftdeveloperblog.com/code-examples/determine-users-current-location-example-in-swift/
quelle
quelle
100% arbeiten in iOS Swift 4 von: Parmar Sajjad
Schritt 1: Gehen Sie zu GoogleDeveloper Api Console und erstellen Sie Ihren ApiKey
Schritt 2: Gehen Sie zu Project und installieren Sie den Cocoapods GoogleMaps-Pod
Schritt 3: Gehen Sie zu AppDelegate.swift, importieren Sie GoogleMaps und
Schritt 4: UIKit importieren GoogleMaps-Klasse importieren ViewController: UIViewController, CLLocationManagerDelegate {
}}
Schritt 5: Öffnen Sie die Datei info.plist und fügen Sie unten hinzu. Datenschutz - Speicherort bei Verwendung Verwendung Beschreibung ...... unter einem Basis-Storyboard-Basisdaten
Schritt 6: Ausführen
quelle