2016-07-19 1 views
0

일반적으로 CLLocation을 사용하여 사용자의 위치를 ​​잡으려고하면 locationManager.startUpdatingLocations()을 사용할 때 didUpdateLocations 메서드를 사용합니다 (모든 것이 잘 수행 된 경우).Swift : CLLocation을 수동으로 호출하는 방법

하지만 수동으로 위치를 가져 오는 함수를 호출하여 완성 처리기를 사용할 수 있어야합니다. didUpdateLocations 방법을 사용하지 않고 위치 업데이트를 시작한 후 사용자의 위치를 ​​얻으려면 어떻게해야합니까?

+0

나는 당신의 질문을 이해할 수 없다고 생각합니다. 어떤 완성 처리기에 대해 이야기하고 있습니까? LocationManager : didUpdateLocations :를 사용하여 위치 관리자가 위치 업데이트를 마쳤을 때를 알 수 있습니다. – AdamPro13

답변

0

언제든지 CLLocationManagerlocation 속성에 액세스 할 수 있습니다. 가장 최근에 결정된 위치가 표시됩니다. 위치가 결정되지 않으면 nil 일 수 있습니다.

나중에 iOS 9 &을 타겟팅하는 경우 requestLocation 방법을 사용하여 단일 위치 업데이트를 요청할 수 있습니다. 평소와 같이 위치 업데이트가 didUpdateLocations으로 전달됩니다. 동기/차단 "요청 위치가 없습니다. 업데이트를 기다리고 나에게 위치를 반환합니다"메서드가 없습니다.

1

"수동으로 CLLocation 호출"할 수 없습니다. 위치 업데이트를 시작하면 시스템에서 didUpdateLocations 메소드 호출을 시작합니다. 첫 번째 위치는 정확도가 떨어질 수 있습니다. 좋은 위치를 얻으려면 정확성을 확인하고 그것을 수락하기 전에 요구 사항을 충족하는 위치를 얻을 때까지 기다려야합니다.

아직 새 requestLocation 방법을 사용하지 않았으므로 처음 위치를 요청할 때 얻은 열악한 결과와 관련하여 어떻게 작동하는지 알 수 없습니다. 문서는 "위치 픽스는 desiredAccuracy 속성에 표시된 정확도 수준에서 얻습니다."라고 말하지만, startUpdatingLocations도 원하는 정확도를 부여하며 처음 몇 번의 수치는 GPS가 꺼져있는 경우에 발생합니다. startUpdatingLocations .

어쨌든 두 가지 방법 모두 didUpdateLocations에 결과/결과를 호출합니다.

일단 위치를 얻으면 클로저/완료 처리기를 호출하려면 자신의 위치 관리자 싱글 톤을 만드는 것이 좋습니다. MyLocationManager이라고합시다.

getLocation(completion:) 메서드를 제공하고 완료 블록을 만들 수 있습니다. 구현은 위치 업데이트를 시작하거나 requestLocation을 호출합니다 (해당 메소드가 신뢰할 수있는 처음 위치를 제공하는 경우). 또한 (옵션) 인스턴스 변수에 완료 핸들러 클로저를 저장하지 않을 것입니다. MyLocationManager의 didUpdateLocations 구현에서 완료 핸들러를 확인한 다음 완료 핸들러가없는 경우 호출합니다.

관련 문제