코어 위치 포 지 셔 닝
10528 단어 이 카드 는 좀 춥다.ios
CoreLocation
은 iOS 에서 장치 위 치 를 제공 하 는 프레임 워 크 입 니 다.이 프레임 워 크 를 통 해 포 지 셔 닝 처 리 를 실현 하고 위치 데 이 터 를 얻 을 수 있 습 니 다.위치 데 이 터 는 보통 경도,위도,해발 정보 등 을 포함한다.iOS 8 시스템 에서 포 지 셔 닝 서 비 스 를 사용 하려 면
info.plist
파일 에 두 개의 변수NSLocationAlwaysUsageDescription
와NSLocationWhenInUseUsageDescription
를 추가 해 야 합 니 다.이 두 키 의 값 은 응용 프로그램의 시종 사용 과 사용 기간 에 포 지 셔 닝 을 사용 하 는 설명 에 사 용 됩 니 다.NSLocationAlwaysUsageDescription
String 응용 프로그램 은 항상 포 지 셔 닝 서 비 스 를 사용 합 니 다.NSLocationWhenInUseUsageDescription
String 이 프로그램 을 사용 하 는 동안 위치 추적 서 비 스 를 사용 할 수 있 습 니 다.CLLocationManager 속성 과 방법
속성 명
묘사 하 다.
location:CLLocation
위치.
desiredAccuracy:CLLocationAccuray
위치 정밀도
func startUpdatingLocation()
업데이트 위치 열기
func stopUpdatingLocation()
위치 업데이트 중지
func startUpdatingHeading()
업데이트 방향 열기
func stopUdatingHeading()
업데이트 중지 방향
정밀도 의 6 가지 선택
desired 정확도 속성
묘사 하 다.
let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy
정밀도 가 가장 높 아 일반적으로 내 비게 이 션 에 쓰 인 다.
let kCLLocationAccuracyBest: CLLocationAccuracy
정밀도 가 가장 좋다.
let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
정확도 10 미터 이내
let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
정확도 100 미터 내
let kCLLocationAccuracyKilometer: CLLocationAccuracy
정확도 1000 미터 내
let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy
정확도 3000 미터 내
관리자 가 업 데 이 트 를 시작 하면 업 데 이 트 는 업데이트 가 끝 날 때 까지 위치 관리자 에 게 계속 전 달 됩 니 다.위치 관리자 가 업데이트 하 는 빈 도 를 직접 제어 할 수 는 없 지만 위치 관리자 의
distanceFilter
속성 으로 간접 적 으로 제어 할 수 있 습 니 다.업 데 이 트 를 시작 하기 전에 속성distanceFilter
을 설정 합 니 다.장치 가 몇 미터 이동 해 야 다른 업 데 이 트 를 의뢰 에 보 낼 수 있 는 지 지정 합 니 다.포 지 셔 닝 요구 의 정밀도 가 높 을 수록 속성distanceFilter
의 값 이 작 을 수록 응용 프로그램의 전력 소비량 이 커진다.그의 단 위 는 쌀 이 므 로 우 리 는 직접 정형 숫자 를 사용 하여 이 거 리 를 설정 할 수 있다.locationManager.distanceFilter = 200
사용자 권한 부여
권한 수여 신청 을 하면 장치 에서 알림 이 뜨 고 사용자 에 게 위치 추적 서 비 스 를 사용 할 수 있 도록 요청 합 니 다.코드 는 다음 과 같 습 니 다:
locationManager.requestAlwaysAuthorization()
didChangeAuthorizationStatus
에이전트 방법 을 통 해 장치 가 포 지 셔 닝 서 비 스 를 사용 할 수 있 는 지 여 부 를 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다.func locationManager(_ manager: CLLocationManager,
didChangeAuthorizationStatus status: CLAuthorizationStatus){
if status == .NotDetermined || status == .Denied{
//
//
locationManager.startUpdatingLocation()
print(" ")
}
}
startUpdatingLocation
방법 으로 포 지 셔 닝 관 리 를 시작 합 니 다.만약 에 우리 가 포 지 셔 닝 을 업데이트 할 필요 가 없 을 때stopUpdatingLocation
방법 으로 포 지 셔 닝 관 리 를 닫 으 면 전 기 를 절약 할 수 있 습 니 다.locationManager.stopUpdatingLocation()
의뢰 류
CLLocationManagerDelegate
에 가장 많이 사용 되 는 방법 은:func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation])
위치 변경 시 이 방법 을 의뢰 하면 새로운 위치,낡은 위 치 를 얻 을 수 있 습 니 다.location 배열 에는 앞 뒤 위치의 경도 위도 좌표 값 이 있 습 니 다.
func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]){
var currlocation:CLLocation
//
currlocation = locations.last as! CLLocation
//
currlocation.coordinate.longitude
//
currlocation.coordinate.latitude
//
currlocation.altitude
}
CLLocation 대상 은 포 지 셔 닝 포인트 와 관련 된 위치 데 이 터 를 포함 하고 경도,위도,해발 정보 가 있 으 며 속성 과 방법 을 통 해 얻 을 수 있 습 니 다.
CLLocation 속성 및 방법
속성 명
기능.
var coordinate: CLLocationCoordinate2D { get }
위치의 위도 와 경도
var altitude: CLLocationDistance { get }
위치 해발
var horizontalAccuracy: CLLocationAccuracy { get }
위치의 수평 정밀도
var verticalAccuracy: CLLocationAccuracy { get }
위치 수직 정밀도
var speed: CLLocationSpeed { get }
위치의 방향
var course: CLLocationDirection { get }
위치의 속도
func distanceFromLocation(_ location: CLLocation) -> CLLocationDistance
두 자리 사이 의 거리
사용`func locationManager(manager: CLLocationManager,
didUpdateHeading newHeading: CLHeading)` 。 `newHeading` CLHeading 。CLHeading :
magneticHeading
와trueHeading
.이 값 의 단 위 는 도 이다.유형 은CLLocationDirection
,즉 쌍 정밀도 부동 소수점 이다.이것 은:만약 항행 방향 이 0.0 이 라면,전진 방향 은 북 이다.
만약 항행 방향 이 90.0 이 라면,전진 방향 은 동쪽 이다.
만약 항행 방향 이 180.0 이 라면,전진 방향 은 남쪽 이다.
만약 항행 방향 이 270.0 이 라면,전진 방향 은 서쪽 이다.
magneticHeading
과trueHeading
는 각각 자성 항 로 를 나타 내 고 실제 항 로 를 나타 낸다.위치 서비스 가 닫 히 면 GPS 와 와 와 이 파 이 는 자장 항 로 를 얻 을 수 밖 에 없다.위치 서 비 스 를 열 어야 실제 항 로 를 얻 을 수 있 습 니 다.프 록 시 를 사용 하기 전에 업데이트 방향 을 켜 야 합 니 다:
locationManager.startUpdatingHeading()
CLHeading 속성
속성 명
묘사 하 다.
magneticHeading
위치의 자극 방향
trueHeading
위치의 실제 방향
headingAccuracy
방향 경도
timestamp
타임 스탬프
description
방향 데이터 가 져 오기
CLError
위치 추적 에 실 패 했 을 때 의뢰 방법 을 호출 합 니 다.
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
//
if let clerr = CLError(rawValue: error.code){
}
}
//CLError
public enum CLError : Int {
case LocationUnknown // location is currently unknown, but CL will keep trying
// ,
case Denied // Access to location or ranging has been denied by the user
//
case Network // general, network-related error
//
case HeadingFailure // heading could not be determined
// ,
case RegionMonitoringDenied // Location region monitoring has been denied by the user
//
case RegionMonitoringFailure // A registered region cannot be monitored
//
case RegionMonitoringSetupDelayed // CL could not immediately initialize region monitoring
//
case RegionMonitoringResponseDelayed // While events for this fence will be delivered, delivery will not occur immediately
//
case GeocodeFoundNoResult // A geocode request yielded no result
//
case GeocodeFoundPartialResult // A geocode request yielded a partial result
//
case GeocodeCanceled // A geocode request was cancelled
//
case DeferredFailed // Deferred mode failed
//
case DeferredNotUpdatingLocation // Deferred mode failed because location updates disabled or paused
// ,
case DeferredAccuracyTooLow // Deferred mode not supported for the requested accuracy
//
case DeferredDistanceFiltered // Deferred mode does not support distance filters
//
case DeferredCanceled // Deferred mode request canceled a previous request
//
case RangingUnavailable // Ranging cannot be performed
//
case RangingFailure // General ranging failure
//
}
더 많은 에이전트 방법 은 문 서 를 보십시오.
지리 정보 반 코딩
코어 로 케 이 션 류 를 통 해 얻 는 지위 정 보 는 모두 경도 와 위도 등 으로 표시 되 는 지리 정보 다.일반적으로 인 코딩 도시 의 주 소 를 되 돌려 야 한다.
이것 은 지리 정보의 반 코딩 을 실현 하기 위해
CLGeocoder
클래스 가 필요 하 다iOS 9 새로운 기능 이 더욱 유연 한 배경 포 지 셔 닝(발췌)
배경 위치 지정 권한 요청:
방법 1
// 1.
_locationManager = [[CLLocationManager alloc] init];
// 2.
_locationManager.delegate = self;
// 3.
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
// 4. :
// :
//⓵
//⓶ ,
// : ⓵ ⓶ , , ⓶ ,
//⓵⓶ , bug: , ⓵ ,⓶ , ⓶
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
//[_locationManager requestWhenInUseAuthorization];//⓵
[_locationManager requestAlwaysAuthorization];//⓶
}
// 5.iOS9 : : app location manager: , ( )。
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
_locationManager.allowsBackgroundLocationUpdates = YES;
}
// 6.
[_locationManager startUpdatingLocation];
대응 하 는 Info.plist 의 XML 소스 코드 는:
NSLocationAlwaysUsageDescription
UIBackgroundModes
location
방법 2:
target 에 대응 하 는 Capabilities->Background Modes->Location Updates 열기
예:
typealias CoreLocationdelegate = ViewController
extension CoreLocationdelegate:CLLocationManagerDelegate{
func configLocation(){
//1 the location manager
let locationManager = CLLocationManager()
//2 setting the desired accuracy
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
//3 setting the distance filter
locationManager.distanceFilter = 1000
//4 getting permission to use location services
locationManager.requestAlwaysAuthorization()
//5 starting the location manager
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
//
if status == CLAuthorizationStatus.Denied || status == CLAuthorizationStatus.NotDetermined{
locationManager.requestAlwaysAuthorization()
}else{
// ,
locationManager.startUpdatingLocation()
//
locationManager.startUpdatingHeading()
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
//
let theLocation = locations.last
//
let latitude = theLocation?.coordinate.latitude
//
let longitude = theLocation?.coordinate.longitude
//
let altitude = theLocation?.altitude
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
//
if let clerr = CLError(rawValue: error.code){
}
}
func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
//
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shirates에서 상대 선택기를 사용하는 방법 - 1부 -이것은 간단하고 강력한 표현입니다(참조). 오른쪽, 아래, 왼쪽, 위 방향으로 상대적으로 위젯을 얻을 수 있습니다. 올바른 방향의 위젯 올바른 방향으로 입력 라벨을 올바른 방향으로 올바른 방향으로 이미지 :오른쪽 버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.