由于是初学者,思绪可能较乱,敬请见谅!
1. 首先,将CoreLocation framework mapkit.framework框架导入到工程当中并且引用
2. 添加#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>引用头文件到你写的类文件中
3.创建一个CLLocation服务的管理者CLLocationManager,设置代理。定义为全局变量方便调用
@property (strong,nonatomic)CLLocationManager *locManager;
4.实例化位置管理器并设置代理,使用startUpdatingLocation和stopUpdatingLocation来开始和结束定位
- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
它的单位是米,这里设置为至少移动1000再通知委托处理更新;
self.locationManager.distanceFilter = 1000.0f; // 如果设为kCLDistanceFilterNone,则每秒更新一次;
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined) {
// 如果授权状态还没有被决定就弹出提示框
} else if (status == kCLAuthorizationStatusDenied) {
// 如果授权状态是拒绝就给用户提示
} else if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) {
// 如果授权状态可以使用就开始获取用户位置
[self.locationManager startUpdatingLocation ];
}
}
//设置定位精度
// kCLLocationAccuracyNearestTenMeters:精度10米
// kCLLocationAccuracyHundredMeters:精度100 米
// kCLLocationAccuracyKilometer:精度1000 米
// kCLLocationAccuracyThreeKilometers:精度3000米
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
// kCLLocationAccuracyBestForNavigation:导航情况下最高精度,一般要有外接电源时才能使用
以下是 早期两个委托方法,一个是成功获得具体的坐标。另一个是失败时候的处理方法。
-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
CLLocationCoordinate2D loc = [newLocation coordinate];
经纬度信息
float longtitude = loc.longitude;
float latitude = loc.latitude;
使用CLGeocoder逆向解析地址
CLGeocoder *geocoder = [[CLGeocoderalloc] init];
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks,NSError *error) {
if (placemarks.count >0 ) {
CLPlacemark * plmark = [placemarksobjectAtIndex:0];
NSString * country = plmark.country;
NSLog(@"%@",country);
}
NSLog(@"%@",placemarks);
}];
[self.locationManager stopUpdatingLocation];
}
//获取信息失败处理函数
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSlog(@"error");
[self.locationManager stopUpdatingLocation];
}
现在常用此方法来监视位置更新,当定位成功后调用
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@"%@", locations);
这里同样是获取地理位置信息,并用使用CLGeocoder逆向解析地址,获取具体地址。再从 CLPlacemark * plmark的各个属性中获取出自己想要的信息
}