위치정보는 CLLocation과 CLLocationManager 두개의 클래스에서 관리가 된다.
CLLocationManager에게 정보를 요청하면 CLLocation 인스턴스에 정보를 담아서 알려준다.
정보를 알려줄 때는 CLLocationManagerDelegate 프로토콜의 locationManager:didUpdateToLocation:fromLocation 메서드를 통해서 알려주므로 위치정보를 알고자 하는 클래스에서 이 프로토콜을 따르도록 해주고 해당 메서드를 구현해주어야 한다. ( 오류발생시에는 locationManager:didFailWithError: 메서드로 통보해준다. )
구현 절차를 보면,
1. 코어 로케이션 프레임워크가 기본적으로 포함되어 있지 않으므로, 코어 로케이션 프레임워크를 프로젝트에 포함시킨다.
위치 : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhone OS2.0.sdk/System/Library/Frameworks
2. 헤더파일 두개를 포함시킨다.
#import <CoreLocation/CoreLocation.h>
#import <CoreLocation/CLLocationManagerDelegate.h>
3. CLLocationManagerDelegate 프로토콜을 따른다고 선언해준다.
@interface MyClass : ParentClass <CLLocationManagerDelegate> {
...
}
...
@end
4. CLLocationManager 객체를 생성하여 델리게이트를 지정해주고 속성을 설정한다.
CLLocationManager* locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = MyClass객체;
locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 감도를 설정하는 부분인데, 이 상수가 가장 정밀한 감도를 뜻한다.
locationManager.distanceFilter = 1000.f // 위치변경시마다 델리게이트 메서드로 통보가 오는데, 이 속성을 설정하게 되면 이 값이 기준이 되어 이 거리만큼을 벗어나게 되면 통보받게 된다.
5. GPS가 활성상태인지 확인
if ( ! [locationManager locationServicesEnabled] ) {
// 활성상태가 아님을 뜻한다.
}
6. MyClass에서 위치정보를 통보받기 위해 locationManager:didUpdateToLocation:fromLocation: 메서드를 구현해준다.
- (void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation {
// newLocation 객체에 현재 위치정보가 담겨져있고, 이전위치가 필요한 경우에는 oldLocation 객체를 활용한다.
}
7. MyClass에서 오류정보를 통보받기 위해 locationManager:didFailWithError: 메서드를 구현해준다.
- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error {
// error 객체로 오류정보가 넘어온다.
}
8. 이러한 기능을 활성/비활성 시키는 메서드
[locationManager startUpdatingLocation]; // 동작시작
[locationManager stopUpdatingLocation]; // 동작중단
8. 다 쓴 후 객체 해제를 해준다.
[locationManager release];
'프로그래밍 > iOS' 카테고리의 다른 글
UITableView Cell에 두줄 입력하기 (0) | 2011.06.08 |
---|---|
iPhone용 Open Source 모음 (0) | 2011.06.05 |
뷰 Animation효과 - 모달창 띄우기 / 창뒤짚이는효과 / 페이지넘김효과 (0) | 2011.06.03 |
@property 옵션 정리 (0) | 2011.06.03 |
iOS 메모리 관리 (0) | 2011.06.02 |