iOS定位开发之CoreLocation

ⅰ亾dé卋堺 提交于 2020-03-07 07:35:42

有时候我们并不需要查看地图,而仅仅需要自己的当前位置就可以,这时候就没有必要去使用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

 

在info.plist添加字段Privacy - Location Usage Description可以设置获取定位权限时候提示给用户的文字

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!