우선 CoreLocation.framework 를 프로젝트에 추가해야 한다. 단 이 작업은 최신 Xcode에서 프레임워크 자동 추가 기능을 이용 할 때는 생략 가능하다.
그리고 CoreLocation 헤더를 소스코드에 추가한다.
#import <CoreLocation/CoreLocation.h>
이제 실제 코딩을 시작한다.
실제로 필요한 클래스는 CLLocationManager이다. 오브젝트를 생성하고 CLLocationManagerDelegate를 구현한 오브젝트를 delegate에 명시해 주면 된다.
CLLocationManager *locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; [locationManager startUpdatingLocation];위 코드에서 delegate에 self를 지정했다. 따라서 위 코드가 구현된 클래스는 CLLocationManagerDelegate 프로토콜을 인터페이스에 명시해야 한다.
그리고 desiredAccuracy는 정확도인데 double 값을 받지만 아래와 같은 옵션이 미리 정의되어 있다.
kCLLocationAccuracyBestForNavigation kCLLocationAccuracyBest kCLLocationAccuracyNearestTenMeters kCLLocationAccuracyHundredMeters kCLLocationAccuracyKilometer kCLLocationAccuracyThreeKilometers원하는 정확도를 이용하면 될 것이다.
마지막으로 startUpdatingLocation 메서드를 호출함으로써 이제 CLLocationManager 는 위치가 바뀔 때 마다 CLLocationManagerDelegate 를 통해 현재 위치를 알려준다.
CLLocationManagerDelegate에서 구현할 메서드는 아래 하나면 족하다.
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { for (CLLocation *location in locations) { CLLocationCoordinate2D coordinate = location.coordinate; ... } }CLLocation의 coordinate 프로퍼티에 위도/경도가 있으니 이를 이용하면 된다.
CLLocation에는 horizontalAccuracy, verticalAccuracy 같은 정확도를 알려주는 프로퍼티도 있다. 정확도를 계속 감시해야 한다면 이를 활용하자.
관련포스트: [iOS] CLGeocoder를 이용해 현재 위치의 주소 얻기
0 comments:
댓글 쓰기