Aby uzyskać bieżącą lokalizację użytkownika, musisz zadeklarować:
let locationManager = CLLocationManager()
W viewDidLoad()
musisz utworzyć instancję CLLocationManager
klasy, tak:
// 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()
}
Następnie w metodzie CLLocationManagerDelegate można uzyskać współrzędne bieżącej lokalizacji użytkownika:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
W info.plist będziesz musiał dodać NSLocationAlwaysUsageDescription
i swój niestandardowy komunikat ostrzegawczy jak; AppName (aplikacja demonstracyjna) chce użyć Twojej bieżącej lokalizacji.
Import MapKit
+CoreLocation
+CLLocationManagerDelegate
w definicji klasy.NSLocationAlwaysUsageDescription
przemianowano naPrivacy - Location Always Usage Description
locationManager
jako zmienną globalną zamiast zmiennej lokalnej wviewDidLoad
powinieneś wykonać następujące kroki:
CoreLocation.framework
do BuildPhases -> Połącz plik binarny z bibliotekami (nie jest już wymagany od XCode 7.2.1)CoreLocation
do swojej klasy - najprawdopodobniej ViewController.swiftCLLocationManagerDelegate
do deklaracji klasowejNSLocationWhenInUseUsageDescription
iNSLocationAlwaysUsageDescription
do listymenedżer lokalizacji init:
Uzyskaj lokalizację użytkownika przez:
źródło
Aktualizacja dla iOS 12.2 z Swift 5
Oto jaka jestem
Upewnij się, że dodałeś framework CoreLocation i MapKit do swojego projektu (nie jest to wymagane w XCode 7.2.1)
Oto ekran wyników
źródło
Importuj bibliotekę:
ustaw Deleguj:
Weź zmienną jak:
Na viewDidLoad () napisz ten ładny kod:
Napisz metody delegowania CLLocation:
Teraz ustaw uprawnienia dostępu do lokalizacji, więc dodaj te kluczowe wartości do pliku info.plist
100% działa bez problemu. PRZETESTOWANY
źródło
NSLocationWhenInUseUsageDescription = Poproś o pozwolenie na korzystanie z usługi lokalizacji, gdy aplikacje są w tle. w pliku plist.
Jeśli to zadziała, proszę głosować na odpowiedź.
źródło
Najpierw zaimportuj bibliotekę Corelocation i MapKit:
odziedziczymy po CLLocationManagerDelegate do naszej klasy
utwórz zmienną locationManager, będą to twoje dane lokalizacji
utwórz funkcję, aby uzyskać informacje o lokalizacji, bądź konkretny, działa ta dokładna składnia:
w swojej funkcji utwórz stałą dla bieżącej lokalizacji użytkownika
przestań aktualizować lokalizację, zapobiegnie to ciągłej zmianie okna przez urządzenie w celu wyśrodkowania lokalizacji podczas przenoszenia (możesz to pominąć, jeśli chcesz, aby działało inaczej)
uzyskaj koordynację użytkowników od właśnie zdefiniowanego użytkownika
określ stopień powiększenia mapy:
let span = MKCoordinateSpanMake(0.2,0.2)
połącz te dwa, aby uzyskać region:teraz ustaw region i wybierz, czy chcesz iść tam z animacją, czy nie
zamknij swoją funkcję
}
za pomocą przycisku lub w inny sposób, aby ustawić locationManagerDeleget na siebie
teraz zezwól na wyświetlanie lokalizacji
wyznaczyć dokładność
autoryzować:
aby móc autoryzować usługę lokalizacji, musisz dodać te dwa wiersze do swojej listy
uzyskaj lokalizację:
pokaż to użytkownikowi:
To jest mój pełny kod:
źródło
Swift 3.0
Jeśli nie chcesz pokazywać lokalizacji użytkownika na mapie, ale po prostu chcesz ją zapisać w bazie ogniowej lub w innym miejscu, wykonaj następujące kroki,
Teraz użyj CLLocationManagerDelegate na swoim VC i musisz przesłonić trzy ostatnie metody pokazane poniżej. Możesz zobaczyć, w jaki sposób metoda requestLocation () uzyska bieżącą lokalizację użytkownika za pomocą tych metod.
Teraz możesz zakodować poniższe połączenie, gdy użytkownik zaloguje się w Twojej aplikacji. Po wywołaniu metody requestLocation () będzie ona wywoływała funkcję didUpdateLocations powyżej i możesz zapisać lokalizację w Firebase lub w dowolnym innym miejscu.
jeśli korzystasz z GeoFire, w powyższej metodzie didUpdateLocations możesz zapisać lokalizację jak poniżej
Last but not least, przejdź do swojej Info.plist i włącz „Prywatność - lokalizacja, gdy jest w użyciu opis użytkowania”.
Kiedy używasz symulatora do testowania, zawsze dajesz jedną niestandardową lokalizację skonfigurowaną w Symulatorze -> Debuguj -> Lokalizacja.
źródło
najpierw dodaj dwie struktury w swoim projekcie
1: MapKit
2: Corelokalizacja (nie jest już wymagana od XCode 7.2.1)
Zdefiniuj w swojej klasie
następnie w metodzie viewDidLoad kod to
nie zapomnij dodać tych dwóch wartości do pliku plist
źródło
Ponieważ wywołanie do
requestWhenInUseAuthorization
jest asynchroniczne, aplikacja wywołujelocationManager
funkcję po tym, jak użytkownik udzieli uprawnienia lub je odrzuci. Dlatego właściwe jest umieszczenie Twojej lokalizacji, aby uzyskać kod wewnątrz tej funkcji, biorąc pod uwagę uprawnienia użytkownika. To najlepszy samouczek na ten temat, jaki na nim znalazłem .źródło
Jest to metoda załadowania widoku i do klasy ViewController należy również metoda aktualizacji mapStart w następujący sposób
Również nie zapomnij dodać CoreLocation.FrameWork i MapKit.Framework w projekcie (nie jest już konieczne, ponieważ z XCode 7.2.1 )
źródło
Stosowanie:
Zdefiniuj pole w klasie
Użycie w funkcji klasy przez prosty kod:
Klasa:
Nie zapomnij dodać „NSLocationWhenInUseUsageDescription” do info.plist.
źródło
Musi napisać ten kod w wymaganym ViewController.
źródło
oto przykład kopiuj-wklej, który zadziałał dla mnie.
http://swiftdeveloperblog.com/code-examples/determine-users-current-location-example-in-swift/
źródło
źródło
100% pracuje w iOS Swift 4 przez: Parmar Sajjad
Krok 1: Przejdź do konsoli Api GoogleDeveloper i utwórz swój ApiKey
Krok 2: Zainstaluj projekt Goto Project Cocoapods GoogleMaps pod
krok 3: Goto AppDelegate.swift zaimportuj GoogleMaps i
krok 4: importuj UIKit importuj klasę GoogleMaps ViewController: UIViewController, CLLocationManagerDelegate {
}
krok 5: otwórz plik info.plist i dodaj poniżej Prywatność - lokalizacja w trakcie użytkowania Opis użycia ...... poniżej głównej nazwy głównego pliku scenorysu
krok 6: uruchom
źródło