免费开源的iOS开发学习平台

定位服务:1-CoreLocation框架的基本介绍

CoreLocation框架对iOS设备的定位功能进行了封装,通过CoreLocation框架可以获取iOS设备的地理位置信息,包括设备的经纬度、海拔等。在CoreLocation框架中,有CLLocationManager以及CLLocation两个核心类需要重点掌握。

CLLocationManager类常用功能介绍

CLLocationManager类用于定位服务管理类,当我们需要获取设备的位置信息时,都需要通过CLLocationManager类来统一管理。通过CLLocationManager类,我们不仅可以获取位置信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向。

  • 获取设备最新的位置信息。
@property(readonly, nonatomic, copy, nullable) CLLocation *location;
  • 设置定位的精度。
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

desiredAccuracy是一个很重要的属性,它有如下六个取值,需要根据应用的类别来具体设置,既要考虑到精度,同时还需要考虑设备的耗电情况。

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation ;//导航情况下的最高精度,一般有外接电源时使用。
extern const CLLocationAccuracy kCLLocationAccuracyBest;//设备使用电池供电时的最高精度
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;//精确到10米
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;//精确到100米
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;//精确到1000米
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;//精确到3000米
  • 设置设备移动后获得位置信息的最小距离。
@property(assign, nonatomic) CLLocationDistance distanceFilter;
  • CLLocationManager类的代理对象
@property(assign, nonatomic, nullable)id delegate;
  • 向用户请求允许在应用使用期间获取位置信息。
- (void)requestWhenInUseAuthorization;
  • 向用户请求允许在任何时间获取位置信息。
- (void)requestAlwaysAuthorization;
  • 开始定位。
- (void)startUpdatingLocation;
  • 停止定位。
- (void)stopUpdatingLocation;

CLLocationManagerDelegate代理协议

CLLocationManagerDelegate代理协议中提供了用于监测设备定位相关的代理方法,常用的有如下几个。

  • 定位成功时调用。在locations参数中,我们可以获取到设备当前的位置信息。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations;
  • 定位失败时调用。
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;
  • 授权状态发生变化调用。
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

CLLocation类常用功能介绍

CLLocation类封装了iOS设备的经纬度、海拔等信息。当我们需要获取设备的位置信息时,通常情况下都需要从CLLocationManager类的location属性中获取。在CLLocation类中,定义了如下几个与地理位置相关的信息。

  • 获取设备的经纬度。
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
  • 获取设备的海拔。
@property(readonly, nonatomic) CLLocationDistance altitude;
  • 获取设备的移动速度(单位是m/s)。
@property(readonly, nonatomic) CLLocationSpeed speed;
  • 当前位置信息获取的时间
@property(readonly, nonatomic, copy) NSDate *timestamp;