CLLocationManager-blocks 1.3.3

CLLocationManager-blocks 1.3.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年9月

Aksel Dybdal 维护。



  • Aksel Dybdal

在 CLLocationManager 上添加 block 以及一些新功能。

注意:从 1.3.0 版本开始支持 iOS 8。

安装

CLLocationManager-block 通过 CocoaPods 提供,要安装它,只需将以下行添加到您的 Podfile 中

pod 'CLLocationManager-blocks'

用法

此分类以两种方式提供位置更新。

  • 自定义位置和航向更新块
  • CLLocationManagerDelegate 方法的 Block 实现方式

用于接收更新块的 Block

通过 block 接收位置更新。

self.manager = [CLLocationManager updateManagerWithAccuracy:50.0 locationAge:15.0 authorizationDesciption:CLLocationUpdateAuthorizationDescriptionAlways];
[self.manager startUpdatingLocationWithUpdateBlock:^(CLLocationManager *manager, CLLocation *location, NSError *error, BOOL *stopUpdating) {
    NSLog(@"Our new location: %@", location);
}]; 

注意:会自动通过调用此方法开始位置更新。无需调用 startUpdatingLocation。

使用此 block,您将获得位置更新而不使用代理方法。底层方法 locationManager:didUpdateLocations: 提供一个数组中的更新,但我们将它们拆分为单独的更新块。

如果更新失败,将提供一个错误,并将 location 设置为 nil。如果成功,则 error 将为 nil,位置将为 CLLocation 对象。

您可以将 stopUpdating 布尔值设置为 YES 以在任何成功或失败更新后停止位置更新。

*stopUpdating = YES; 

还有一个类似的方法用于接收航向更新。

[self.manager startUpdatingHeadingWithUpdateBlock:^(CLLocationManager *manager, CLHeading *heading, NSError *error, BOOL *stopUpdating) {
    NSLog(@"Our new heading: %@", heading);
    *stopUpdating = YES;
}];

授权描述

对于 iOS 8,需要将键 NSLocationAlwaysUsageDescription 设置在 info.plist 中。请确保您已将其添加。

过滤器

除了块之外,还包括了两个新的过滤器。通常在监听位置更新时,您将接收包含不必要年龄或精度的位置更新。然后,人们需要编写代码来避免使用这些更新。得益于新的过滤器,我们只需指定年龄和/或精度即可获得可以工作的位置更新。

updateAccuracyFilter

Core Location 中提供的标准 [CLLocationManager desiredAccuracy] 无法保证满足特定的精度要求。通过设置此参数,将排除所有精度高于指定值的更新。

  • 除非您长时间运行更新,否则请将[CLLocationManager desiredAccuracy]设置为kCLLocationAccuracyBest,并将您指定的以米为单位的updateAccuracyFilter
  • updateAccuracyFilter用于所有块。
  • 默认设置为kCLUpdateAccuracyFilterNone

更新位置年龄过滤器

此参数用于过滤掉比指定秒数更早的位置更新。CLLocationManager的位置更新可能会因不同原因提供旧的更新,这是获取最新更新的好方法。

  • 默认设置为kCLLocationAgeFilterNone

示例

self.manager.updateAccuracyFilter = 50.0;
self.manager.updateLocationAgeFilter = 15.0;
//or
self.manager.updateAccuracyFilter = kCLUpdateAccuracyFilterNone;
self.manager.updateLocationAgeFilter = kCLLocationAgeFilterNone;

该类别包含CLLocationManagerDelegate方法的所有块实现。这些块可以与CLLocationManager一起使用,就像您通常使用代理一样。

注意:与startUpdatingLocationWithUpdateBlock:不同,您必须调用startUpdatingLocation来接收更新。

示例

locationManager:didUpdateLocations

self.manager = [CLLocationManager updateManager];
[self.manager didUpdateLocationsWithBlock:^(CLLocationManager *manager, NSArray *locations) {
    // Did update locations
}];
[self.manager startUpdatingLocation];

便捷方法

用于简化检查用户是否已授权位置更新的步骤的方法。

isLocationUpdatesAvailable

if ([CLLocationManager isLocationUpdatesAvailable]) {
    // Location updates authorized
}

许可证

请参阅LICENSE文件

© 2013 Aksel Dybdal