Sök…
Distansfilter med
Exempel:
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = 5;
Exempelvis i ovanstående exempelkod skickas platsändringar på mindre än 5 meter inte till återuppringningen utan ignoreras istället.
Få användarplats med CLLocationManager
1 - Inkludera CoreLocation.framework i ditt projekt; detta åstadkoms genom att klicka på:
root directory -> build phases -> Link Binary With Libraries
Klicka på (+) -knappen, leta efter CoreLocation.framework och klicka på lägg till.
2- Ändra info.plist-filen för att be om tillåtelse att använda användarplatsen genom att öppna den som källkod. Lägg till någon av följande nycklar: värdeparet under taggen för att be om användning av användarens plats medan applikationen används:
<key>NSLocationWhenInUseUsageDescription</key>
<string>message to display when asking for permission</string>
3- importera CoreLocation till ViewController som kommer att använda den.
import CoreLocation
4- Se till att ViewController överensstämmer med CLLocationManagerDelagate-protokollet
class ViewController: UIViewController,CLLocationManagerDelegate {}
Efter dessa steg kan vi skapa ett CLLocationManager-objekt som instansvariabel och använda det i ViewController.
var manager:CLLocationManager!
Vi använder inte "låt" här eftersom vi kommer att ändra manager för att ange dess delegat, minsta avstånd före uppdateringshändelse och dess noggrannhet
//initialize the manager
manager = CLLocationManager()
//specify delegate
manager.delegate = self
//set the minimum distance the phone needs to move before an update event is triggered (for example: 100 meters)
manager.distanceFilter = 100
//set Accuracy to any of the following depending on your use case
//let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy
//let kCLLocationAccuracyBest: CLLocationAccuracy
//let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
//let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
//let kCLLocationAccuracyKilometer: CLLocationAccuracy
//let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy
manager.desiredAccuracy = kCLLocationAccuracyBest
//ask the user for permission
manager.requestWhenInUseAuthorization()
//Start collecting location information
if #available(iOS 9.0, *) {
manager.requestLocation()
} else {
manager.startUpdatingLocation()
}
För att få tillgång till platsuppdateringarna kan vi implementera funktionen nedan som kallas övertid för att distansfiltret nås.
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {}
Platsparametern är en matris med CLLocation-objekt som representerar den faktiska platsen för enheten. Från dessa objekt kan man få tillgång till följande attribut: coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
och ett funktionsavstånd distance(from:)
som mäter avståndet mellan två platser.
Obs! När du ber om tillstånd för plats finns det två olika typer av tillstånd.
Autorisationen "When in Use" ger appen bara tillstånd att ta emot din plats när appen används eller i förgrunden.
"Alltid" -tillstånd, ger appens bakgrundstillstånd som kan leda till att batteriets livslängd minskar om din app stängs.
Plist-fil bör justeras vid behov.