以前一直觉得以Core开头的框架都挺难的。最近要搞一个项目要用到定位技术,所以就看了下CoreLocation框架。
简单地看了下技术资料,发现CoreLocation并不像想象中的那么难。其实在CoreLocation中核心的就是CLLocationManager类及其代理
CLLocationManagerDelegate了。只要把这个搞懂了,这个框架也就没什么大问题。而且常用的也就是那么一点点,好多功能平时也并不使用。
本文的目标就是做一个最简单的获取当前位置的实例,入门级的。
1.初始化一个CLLocationManager的实例。该类及代理用于设置定位的各参数(距离过滤,位置精确度,是否允许后台运行等),定位的方法等。
self.manager = [[CLLocationManageralloc]init];
2.获取当前设备定位按钮是否打开。
[CLLocationManagerlocationServicesEnabled] //确保设备可以定位,如果返回NO,那就只能return了。
3.获取用户授权,用户是否愿意打开位置信息呢。想必大家都不会陌生,一用到定位类型的app,系统都会弹出对话框,让用户选择。
if ([CLLocationManagerauthorizationStatus] ==kCLAuthorizationStatusNotDetermined) {
[self.managerrequestAlwaysAuthorization];
}
4.判断用户已经授权后,设置代理及开始位置更新。(当然在这里还可以有很多的设置可以做)
if ([CLLocationManagerauthorizationStatus] ==kCLAuthorizationStatusAuthorizedAlways || [CLLocationManagerauthorizationStatus] ==kCLAuthorizationStatusAuthorizedWhenInUse) {
[self.managersetDelegate:self];
[self.managerstartUpdatingLocation];
}
5.实现代理方法。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
CLLocation *location = [locationslastObject];
[self.geocoderreverseGeocodeLocation:locationcompletionHandler:^(NSArray<CLPlacemark *> *_Nullable placemarks,NSError *_Nullable error) {
CLPlacemark *placemark = [placemarkslastObject];
NSLog(@"%@",placemark);
}];
}
6.还有一个很重要的地方需要设置。在plist中,增加一个Privacy - Location Always Usage Description的key。
说明:self.geocoder是CLGeocoder的实例。这个类主要有两个功能:a.把位置信息(经纬度)反算成地址信息。 b.把地址信息计算出经位置信息(经纬度)。
self.geocoder = [[CLGeocoderalloc]init];
第一次写技术博客,也是受到网上说技术要多交流才会有进步的影响。感觉写得不怎么样,就当是抛砖引玉吧。请大家多多指正