[iOS] CoreLocation Framework를 이용한 현재 위치 찾기
iOS에서는 Mapkit을 이용하면 간단하게 현재 위치를 지동 상에 표시하는 것이 가능하다. 하지만 이건 MKMapView 를 사용 할 때의 이야기이다. 맵뷰를 사용하지 않고 현재 위치를 찾으려면 CoreLocation Framework를 이용해야 한다.
우선 CoreLocation.framework 를 프로젝트에 추가해야 한다. 단 이 작업은 최신 Xcode에서 프레임워크 자동 추가 기능을 이용 할 때는 생략 가능하다.
그리고 CoreLocation 헤더를 소스코드에 추가한다.
이제 실제 코딩을 시작한다.
실제로 필요한 클래스는 CLLocationManager이다. 오브젝트를 생성하고 CLLocationManagerDelegate를 구현한 오브젝트를 delegate에 명시해 주면 된다.
그리고 desiredAccuracy는 정확도인데 double 값을 받지만 아래와 같은 옵션이 미리 정의되어 있다.
마지막으로 startUpdatingLocation 메서드를 호출함으로써 이제 CLLocationManager 는 위치가 바뀔 때 마다 CLLocationManagerDelegate 를 통해 현재 위치를 알려준다.
CLLocationManagerDelegate에서 구현할 메서드는 아래 하나면 족하다.
CLLocation에는 horizontalAccuracy, verticalAccuracy 같은 정확도를 알려주는 프로퍼티도 있다. 정확도를 계속 감시해야 한다면 이를 활용하자.
관련포스트: [iOS] CLGeocoder를 이용해 현재 위치의 주소 얻기
우선 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를 이용해 현재 위치의 주소 얻기
댓글