首页 > 代码库 > iOS定位开发之CoreLocation
iOS定位开发之CoreLocation
有时候我们并不需要查看地图,而仅仅需要自己的当前位置就可以,这时候就没有必要去使用MapKit可,直接使用定位服务就好了
苹果提供了CoreLocation框架来做定位功能
首先要想项目中导入CoreLocation框架
定位服务开启之前最好查看一下定位服务是否可用,有可能用户已经拒绝或者用户手机定位模块有问题,无法定位
定位服务是由CLLocationManager来管理的
定位成功等信息也是通过代理发送给对象的,另外定位中经常需要用到地理位置的解码和反解码(其实就是经纬度和地名之间的转换)
下面的范例代码有基本的使用方式和注意点
#import "ViewController.h"#import <CoreLocation/CoreLocation.h>@interface ViewController () <CLLocationManagerDelegate>{ // 定位服务管理器 CLLocationManager *_locationManager; // 使用地理编码器 CLGeocoder *_geocoder;}@end@implementation ViewController/** 1. 在开发LBS类的应用时,获取用户定位信息之前,一定要判断一下定位服务是否允许 + locationServicesEnabled 2. 开启定位,获取自己的当前位置 [_locationManager startUpdatingLocation]; 3. 根据经纬度,知道准确的地名 reverseGeocodeLocation 4. 根据定名,获取到经纬度 应用场景:导航 geocodeAddressString */- (void)viewDidLoad{ [super viewDidLoad]; if (![CLLocationManager locationServicesEnabled]) { NSLog(@"定位服务不可用!"); return; } NSLog(@"定位服务可用!"); _locationManager = [[CLLocationManager alloc] init]; // 定位用户位置,开始更新用户位置// [_locationManager startUpdatingLocation]; // 设置代理 _locationManager.delegate = self; // 实例化地理编码器 _geocoder = [[CLGeocoder alloc] init]; [_geocoder geocodeAddressString:@"中山门" completionHandler:^(NSArray *placemarks, NSError *error) { for (CLPlacemark *placemark in placemarks) { NSLog(@"%@ %lu", placemark, (unsigned long)placemarks.count); } }];}#pragma mark - 更新位置代理方法#pragma mark 只要位置变化,就会被调用,费电!如果地位完成,最好及时关闭定位功能!- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"位置变化: %@", locations[0]); // 根据经纬度查找(去苹果后台查找准确的位置,必须联网才能用) [_geocoder reverseGeocodeLocation:locations[0] completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"%@", placemarks[0]); }];}@end
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。