Kullanıcının Mevcut Konumunu / Koordinatlarını Alın


201

Kullanıcının mevcut konumunu nasıl kaydedebilirim ve konumu bir harita üzerinde nasıl gösterebilirim?

Bir harita üzerinde önceden tanımlanmış koordinatları gösterebiliyorum, sadece cihazdan nasıl bilgi alacağımı bilmiyorum.

Ayrıca bir Plist'e bazı öğeler eklemem gerektiğini de biliyorum. Bunu nasıl yapabilirim?

Yanıtlar:


232

Bir kullanıcının mevcut konumunu almak için şunları beyan etmeniz gerekir:

let locationManager = CLLocationManager()

İçinde sınıfı viewDidLoad()örneklemelisiniz, şöyle CLLocationManagerki:

// 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()
}

Daha sonra CLLocationManagerDelegate yönteminde kullanıcının mevcut konum koordinatlarını alabilirsiniz:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}

İnfo.plist içinde, aşağıdaki NSLocationAlwaysUsageDescription gibi özel uyarı mesajınızı eklemeniz gerekecek ; AppName (Demo Uygulaması) mevcut konumunuzu kullanmak istiyor.


61
Sınıf tanımına Import MapKit+ CoreLocation+ eklemeyi unutmayın CLLocationManagerDelegate.
Lukesivi

7
@Yusha Bu size Objective-C gibi görünüyorsa, o zaman Objective-C'yi (ne de Swift)
görmediniz

4
CLLocationManagerDelegate protokolünün uygulanmasından bahsetmeyi unuttunuz.
ssd352

13
NSLocationAlwaysUsageDescriptionolarak yeniden adlandırıldıPrivacy - Location Always Usage Description
Saoud Rizwan

4
locationManagerYerel bir değişken yerine global bir değişken olarak bildirmeniz GEREKİRviewDidLoad
chengsam

101

şu adımları uygulamalısın:

  1. CoreLocation.frameworkBuildPhases'e ekle -> İkili Kitaplıklarla Bağla (XCode 7.2.1'den itibaren artık gerekli değildir)
  2. CoreLocationsınıfınıza aktarın - büyük olasılıkla ViewController.swift
  3. CLLocationManagerDelegatesınıf beyanınıza ekleyin
  4. ekle NSLocationWhenInUseUsageDescriptionve NSLocationAlwaysUsageDescriptionpliste
  5. init konum yöneticisi:

    locationManager = CLLocationManager()
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()
    
  6. Kullanıcının Konumunu Al:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }
    

3
yeni işlev: func locationManager (yönetici: CLLocationManager, didUpdateLocations konumları: [CLLocation])
user523234

Adım adım cevap. Ama lütfen güncelleyin. Şimdilik çalışmıyor.
Dheeraj D

63

Swift 5 ile iOS 12.2 güncellemesi

plist dosyasına aşağıdaki gizlilik izinlerini eklemelisiniz

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

Ben buyum işte

geçerli konumu alma ve Swift 2.0'da Haritada gösterme

Projenize CoreLocation ve MapKit çerçevesini eklediğinizden emin olun (Bu, XCode 7.2.1 ile gerekli değildir)

import Foundation
import CoreLocation
import MapKit

class DiscoverViewController : UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var map: MKMapView!
    var locationManager: CLLocationManager!

    override func viewDidLoad()
    {
        super.viewDidLoad()

        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

    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))

        self.map.setRegion(region, animated: true)
    }
}

İşte sonuç ekranı

Mumbai merkezli haritanın ekran görüntüsü


Kodunuzu çalıştırıyorum ve boş bir beyaz ekran görüyorum. Film şeridine eklemem gereken bir görünüm veya bir şey var mı?
ThisClark

1
Swift 4'te benim için harika çalıştı, sadece bir alt çizgi eklemek zorunda kaldı (Xcode tarafından istenir), böylece locationManager satırı şu hale geldi: func locationManager (_ manager: CLLocationManager, didUpdateLocations konumlar: [CLLocation])
Elijah Lofgren,

33

Kitaplığı şu şekilde içe aktar:

import CoreLocation

Temsilci ayarla:

CLLocationManagerDelegate

Değişkenleri şöyle alın:

var locationManager:CLLocationManager!

ViewDidLoad () üzerinde şu güzel kodu yazın:

 locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()

    if CLLocationManager.locationServicesEnabled(){
        locationManager.startUpdatingLocation()
    }

CLLocation temsilci yöntemlerini yazın:

    //MARK: - location delegate methods
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation :CLLocation = locations[0] as CLLocation

    print("user latitude = \(userLocation.coordinate.latitude)")
    print("user longitude = \(userLocation.coordinate.longitude)")

    self.labelLat.text = "\(userLocation.coordinate.latitude)"
    self.labelLongi.text = "\(userLocation.coordinate.longitude)"

    let geocoder = CLGeocoder()
    geocoder.reverseGeocodeLocation(userLocation) { (placemarks, error) in
        if (error != nil){
            print("error in reverseGeocode")
        }
        let placemark = placemarks! as [CLPlacemark]
        if placemark.count>0{
            let placemark = placemarks![0]
            print(placemark.locality!)
            print(placemark.administrativeArea!)
            print(placemark.country!)

            self.labelAdd.text = "\(placemark.locality!), \(placemark.administrativeArea!), \(placemark.country!)"
        }
    }

}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Error \(error)")
}

Şimdi konuma erişim iznini ayarlayın, bu nedenle bu anahtar değerlerini info.plist dosyanıza ekleyin

 <key>NSLocationAlwaysUsageDescription</key>
<string>Will you allow this app to always know your location?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>

görüntü açıklamasını buraya girin

% 100 sorunsuz çalışıyor. TEST EDİLDİ


başka bir dilim var, o zaman çalışmıyor. sadece ingilizce dilini istiyorum.
Maulik Şah

29

@wonderwhy Kod ekran resmimi ekledim.  lütfen kontrol edin.  Yetkilendirme için pliste <code> NSLocationWhenInUseUsageDescription eklemeniz gerekir. </code>

NSLocationWhenInUseUsageDescription = Uygulamalar arka planda olduğunda konum hizmetini kullanmak için izin isteyin. plist dosyanızda.

Bu işe yararsa, lütfen yanıtı oylayın.


1
cevabınızı kod ekleyerek daha fazla açıklayabilirsiniz. dilerseniz
Krutarth Patel

16
bir ekran görüntüsü yapıştırmak yerine biçimlendirme dilini kullanan kod pasajına sahip olmak güzel olurdu
Nicholas Allio

25

İlk olarak Corelocation ve MapKit kitaplığını içe aktarın:

import MapKit
import CoreLocation

CLLocationManagerDelegate'ten sınıfımıza miras alın

class ViewController: UIViewController, CLLocationManagerDelegate

bir locationManager değişkeni oluşturun, bu sizin konum verileriniz olacaktır

var locationManager = CLLocationManager()

Konum bilgisini almak için bir işlev oluşturun, bu söz diziminin tam olarak çalıştığı spesifik olun:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

işlevinizde kullanıcıların mevcut konumu için bir sabit oluşturun

let userLocation:CLLocation = locations[0] as CLLocation // note that locations is same as the one in the function declaration  

konum güncellemesini durdurun, bu, cihazınızın hareket ederken konumunuzu ortalamak için sürekli olarak Pencereyi değiştirmesini önler (aksi takdirde çalışmasını istiyorsanız bunu atlayabilirsiniz)

manager.stopUpdatingLocation()

Kullanıcıların az önce tanımladığınız userLocatin'den koordinasyonunu alın

let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude)

haritanızın ne kadar yakınlaştırılmış olmasını istediğinizi tanımlayın:

let span = MKCoordinateSpanMake(0.2,0.2) bölgeyi elde etmek için bu ikisini birleştirin:

let region = MKCoordinateRegion(center: coordinations, span: span)//this basically tells your map where to look and where from what distance

şimdi bölgeyi ayarlayın ve oraya animasyonla gitmesini isteyip istemediğinizi seçin

mapView.setRegion(region, animated: true)

işlevini kapat }

düğmenizden veya locationManagerDeleget'i self olarak ayarlamak istediğiniz başka bir yolla

şimdi konumun gösterilmesine izin ver

doğruluğu belirlemek

locationManager.desiredAccuracy = kCLLocationAccuracyBest

yetki vermek:

 locationManager.requestWhenInUseAuthorization()

konum hizmetini yetkilendirebilmek için bu iki satırı plistinize eklemeniz gerekir

görüntü açıklamasını buraya girin

konum al:

locationManager.startUpdatingLocation()

kullanıcıya göster:

mapView.showsUserLocation = true

Bu benim tam kodum:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var mapView: MKMapView!

    var locationManager = CLLocationManager()


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func locateMe(sender: UIBarButtonItem) {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        mapView.showsUserLocation = true

    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation:CLLocation = locations[0] as CLLocation

        manager.stopUpdatingLocation()

        let coordinations = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude,longitude: userLocation.coordinate.longitude)
        let span = MKCoordinateSpanMake(0.2,0.2)
        let region = MKCoordinateRegion(center: coordinations, span: span)

        mapView.setRegion(region, animated: true)

    }
}

21

Swift 3.0

Kullanıcı konumunu haritada göstermek istemiyor, ancak bunu firebase'de veya başka bir yerde saklamak istiyorsanız, bu adımları izleyin,

import MapKit
import CoreLocation

Şimdi VC'nizde CLLocationManagerDelegate'i kullanın ve aşağıda gösterilen son üç yöntemi geçersiz kılmalısınız. Bu yöntemleri kullanarak requestLocation () yönteminin geçerli kullanıcı konumunu nasıl elde edeceğini görebilirsiniz.

class MyVc: UIViewController, CLLocationManagerDelegate {

  let locationManager = CLLocationManager()

 override func viewDidLoad() {
    super.viewDidLoad()

    isAuthorizedtoGetUserLocation()

    if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    }
}

 //if we have no permission to access user location, then ask user for permission.
func isAuthorizedtoGetUserLocation() {

    if CLLocationManager.authorizationStatus() != .authorizedWhenInUse     {
        locationManager.requestWhenInUseAuthorization()
    }
}


//this method will be called each time when a user change his location access preference.
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
    if status == .authorizedWhenInUse {
        print("User allowed us to access location")
        //do whatever init activities here.
    }
}


 //this method is called by the framework on         locationManager.requestLocation();
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print("Did location updates is called")
    //store the user location here to firebase or somewhere 
}

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Did location updates is called but failed getting location \(error)")
}

}

Artık, kullanıcı uygulamanızda oturum açtığında aşağıdaki çağrıyı kodlayabilirsiniz. RequestLocation () çağrıldığında yukarıdaki didUpdateLocations'ı daha da çağırır ve konumu Firebase'de veya başka bir yerde depolayabilirsiniz.

if CLLocationManager.locationServicesEnabled() {
            locationManager.requestLocation();
 }

GeoFire kullanıyorsanız yukarıdaki didUpdateLocations yönteminde konumu aşağıdaki gibi kaydedebilirsiniz.

geoFire?.setLocation(locations.first, forKey: uid) where uid is the user id who logged in to the app. I think you will know how to get UID based on your app sign in implementation. 

Son olarak, Info.plist'inize gidin ve "Kullanım Açıklamasında Gizlilik - Konum" u etkinleştirin.

Simülatörü test etmek için kullandığınızda, size her zaman Simülatör -> Hata Ayıklama -> Konum'da yapılandırdığınız bir özel konum sağlar.


Merhaba, Konumlar nerede (boylam, enlem), Konumlar ne sıklıkla yeniden yükleniyor?
Cristian Mora

@CristianMora locationManager.requestLocation çağrıldığında, bu bir Locations dizisi olduğunda locationManager (_ manager: CLLocationManager, didUpdateLocations konumları: [CLLocation]) çağrılır ve bunlardan birini kullanabilir veya kullanıcıya en uygun olanı seçmesini gösterebilirsiniz. konumlar CLLocation türündedir ve bu nesneden boylam, enlem elde edebilirsiniz. Kullanıcı bilgilerine yalnızca bir kez ihtiyacınız varsa, yeniden yükleme konumlarına ihtiyacınız olmaz, aksi takdirde gerektiği gibi requestLocation () öğesini çağırabilirsiniz. Örnek bir arama isteği, önce requestLocation () ararsınız ve ardından konuma göre cevap verirsiniz.
Lyju I Edwinson

15

önce projenize iki çerçeve ekleyin

1: MapKit

2: Corelocation (XCode 7.2.1'den itibaren artık gerekli değildir)

Sınıfınızda tanımlayın

var manager:CLLocationManager!
var myLocations: [CLLocation] = []

sonra viewDidLoad yöntemi kodu bu

manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestAlwaysAuthorization()
manager.startUpdatingLocation()

//Setup our Map View
mapobj.showsUserLocation = true

plist dosyasına bu iki değeri eklemeyi unutmayın

1: NSLocationWhenInUseUsageDescription

2: NSLocationAlwaysUsageDescription

11
import CoreLocation
import UIKit

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager: CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
    } 

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        if status != .authorizedWhenInUse {return}
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        let locValue: CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
    }
}

Çağrısı requestWhenInUseAuthorizationeşzamansız olduğundan, locationManagerkullanıcı izin verdikten veya reddettikten sonra uygulama işlevi çağırır . Bu nedenle, kullanıcıya izin verilmiş olan konumunuzu kod alarak bu işlevin içine yerleştirmeniz uygundur. Bu, üzerinde bulduğum en iyi öğretici .


10
 override func viewDidLoad() {

    super.viewDidLoad()       
    locationManager.requestWhenInUseAuthorization();     
    if CLLocationManager.locationServicesEnabled() {
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.startUpdatingLocation()
    }
    else{
        print("Location service disabled");
    }
  }

Bu, görünümünüzün yükleme yöntemidir ve ViewController Sınıfında ayrıca aşağıdaki gibi mapStart güncelleme yöntemini içerir

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    var locValue : CLLocationCoordinate2D = manager.location.coordinate;
    let span2 = MKCoordinateSpanMake(1, 1)    
    let long = locValue.longitude;
    let lat = locValue.latitude;
    print(long);
    print(lat);        
    let loadlocation = CLLocationCoordinate2D(
                    latitude: lat, longitude: long            

   )     

    mapView.centerCoordinate = loadlocation;
    locationManager.stopUpdatingLocation();
}

Ayrıca projenize CoreLocation.FrameWork ve MapKit.Framework eklemeyi unutmayın ( XCode 7.2.1'den itibaren artık gerekli değildir )


10

Kullanım:

Sınıfta alan tanımlayın

let getLocation = GetLocation()

Basit kodla sınıfın işlevinde kullanın:

getLocation.run {
    if let location = $0 {
        print("location = \(location.coordinate.latitude) \(location.coordinate.longitude)")
    } else {
        print("Get Location failed \(getLocation.didFailWithError)")
    }
}

Sınıf:

import CoreLocation

public class GetLocation: NSObject, CLLocationManagerDelegate {
    let manager = CLLocationManager()
    var locationCallback: ((CLLocation?) -> Void)!
    var locationServicesEnabled = false
    var didFailWithError: Error?

    public func run(callback: @escaping (CLLocation?) -> Void) {
        locationCallback = callback
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        manager.requestWhenInUseAuthorization()
        locationServicesEnabled = CLLocationManager.locationServicesEnabled()
        if locationServicesEnabled { manager.startUpdatingLocation() }
        else { locationCallback(nil) }
    }

   public func locationManager(_ manager: CLLocationManager,
                         didUpdateLocations locations: [CLLocation]) {
        locationCallback(locations.last!)
        manager.stopUpdatingLocation()
    }

    public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        didFailWithError = error
        locationCallback(nil)
        manager.stopUpdatingLocation()
    }

    deinit {
        manager.stopUpdatingLocation()
    }
}


İnfo.plist içine "NSLocationWhenInUseUsageDescription" eklemeyi unutmayın.


1
Teşekkürler! İnfo.plist'e "NSLocationWhenInUseUsageDescription" eklemeyi unutmayın
Jonas Deichelmann

4
import Foundation
import CoreLocation

enum Result<T> {
  case success(T)
  case failure(Error)
}

final class LocationService: NSObject {
    private let manager: CLLocationManager

    init(manager: CLLocationManager = .init()) {
        self.manager = manager
        super.init()
        manager.delegate = self
    }

    var newLocation: ((Result<CLLocation>) -> Void)?
    var didChangeStatus: ((Bool) -> Void)?

    var status: CLAuthorizationStatus {
        return CLLocationManager.authorizationStatus()
    }

    func requestLocationAuthorization() {
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        if CLLocationManager.locationServicesEnabled() {
            manager.startUpdatingLocation()
            //locationManager.startUpdatingHeading()
        }
    }

    func getLocation() {
        manager.requestLocation()
    }

    deinit {
        manager.stopUpdatingLocation()
    }

}

 extension LocationService: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        newLocation?(.failure(error))
        manager.stopUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.sorted(by: {$0.timestamp > $1.timestamp}).first {
            newLocation?(.success(location))
        }
        manager.stopUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch status {
        case .notDetermined, .restricted, .denied:
            didChangeStatus?(false)
        default:
            didChangeStatus?(true)
        }
    }
}

Bu kodu gerekli ViewController'a yazmanız gerekir.

 //NOTE:: Add permission in info.plist::: NSLocationWhenInUseUsageDescription


let locationService = LocationService()

 @IBAction func action_AllowButtonTapped(_ sender: Any) {
     didTapAllow()
 }

 func didTapAllow() {
     locationService.requestLocationAuthorization()
 }

 func getCurrentLocationCoordinates(){
   locationService.newLocation = {result in
     switch result {
      case .success(let location):
      print(location.coordinate.latitude, location.coordinate.longitude)
      case .failure(let error):
      assertionFailure("Error getting the users location \(error)")
   }
  }
}

func getCurrentLocationCoordinates() {
    locationService.newLocation = { result in
        switch result {
        case .success(let location):
            print(location.coordinate.latitude, location.coordinate.longitude)
            CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
                if error != nil {
                    print("Reverse geocoder failed with error" + (error?.localizedDescription)!)
                    return
                }
                if (placemarks?.count)! > 0 {
                    print("placemarks", placemarks!)
                    let pmark = placemarks?[0]
                    self.displayLocationInfo(pmark)
                } else {
                    print("Problem with the data received from geocoder")
                }
            })
        case .failure(let error):
            assertionFailure("Error getting the users location \(error)")
        }
    }
}

0

İşte benim için çalışan bir kopyala-yapıştır örneği.

http://swiftdeveloperblog.com/code-examples/determine-users-current-location-example-in-swift/

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager:CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        determineMyCurrentLocation()
    }


    func determineMyCurrentLocation() {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestAlwaysAuthorization()

        if CLLocationManager.locationServicesEnabled() {
            locationManager.startUpdatingLocation()
            //locationManager.startUpdatingHeading()
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation:CLLocation = locations[0] as CLLocation

        // Call stopUpdatingLocation() to stop listening for location updates,
        // other wise this function will be called every time when user location changes.

       // manager.stopUpdatingLocation()

        print("user latitude = \(userLocation.coordinate.latitude)")
        print("user longitude = \(userLocation.coordinate.longitude)")
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
    {
        print("Error \(error)")
    }
}

-1
// its with strongboard 
@IBOutlet weak var mapView: MKMapView!

//12.9767415,77.6903967 - exact location latitude n longitude location 
let cooridinate = CLLocationCoordinate2D(latitude: 12.9767415 , longitude: 77.6903967)
let  spanDegree = MKCoordinateSpan(latitudeDelta: 0.2,longitudeDelta: 0.2)
let region = MKCoordinateRegion(center: cooridinate , span: spanDegree)
mapView.setRegion(region, animated: true)

-1

% 100 iOS Swift 4'te çalışan: Parmar Sajjad

Adım 1: GoogleDeveloper Api Konsoluna gidin ve ApiKey'inizi oluşturun

Adım 2: Goto Project, Cocoapods GoogleMaps bölmesini yükleyin

3. adım: Goto AppDelegate.swift GoogleMaps'i içe aktarın ve

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    GMSServices.provideAPIKey("ApiKey")
    return true
}

4. adım: UIKit'i içe aktarın GoogleMaps sınıfını içe aktarın ViewController: UIViewController, CLLocationManagerDelegate {

@IBOutlet weak var mapview: UIView!
let locationManager  = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    locationManagerSetting()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func locationManagerSetting() {

    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    self.showCurrentLocationonMap()
    self.locationManager.stopUpdatingLocation()
}
func showCurrentLocationonMap() {
    let
    cameraposition  = GMSCameraPosition.camera(withLatitude: (self.locationManager.location?.coordinate.latitude)!  , longitude: (self.locationManager.location?.coordinate.longitude)!, zoom: 18)
    let  mapviewposition = GMSMapView.map(withFrame: CGRect(x: 0, y: 0, width: self.mapview.frame.size.width, height: self.mapview.frame.size.height), camera: cameraposition)
    mapviewposition.settings.myLocationButton = true
    mapviewposition.isMyLocationEnabled = true

    let marker = GMSMarker()
    marker.position = cameraposition.target
    marker.snippet = "Macczeb Technologies"
    marker.appearAnimation = GMSMarkerAnimation.pop
    marker.map = mapviewposition
    self.mapview.addSubview(mapviewposition)

}

}

adım 5: info.plist dosyasını açın ve Aşağıya Ekle Gizlilik - Kullanım Sırasında Konum Kullanım Açıklaması ...... bir Ana film şeridi dosya temel adının altına

6. adım: koş

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.