经验拾遗之定位功能

  iOS开发,定位功能是很多app的核心功能,也是出门在外的必用功能,现在来重新整理一下CoreLocation这个框架常用以及新增功能。

1.首先设置locationManager,都是简单明了的:

self.locationManager = [[CLLocationManager alloc] init];

self.locationManager.delegate = self;

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

self.locationManager.distanceFilter = 10;

[self.locationManager requestWhenInUseAuthorization];

[self.locationManager startUpdatingLocation];

2.实现delegate,当有位置更新时自定义操作:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

NSLog(@"%@", [locations lastObject]);

}

3.iOS8新增:

- requestWhenInUseAuthorization

- requestAlwaysAuthorization

这两个方法用于请求定位服务授权,一个是使用期间授权,一个是永久授权。对于用户来说是好事,当app不在使用,不希望获取自己的定位,可以省电省流量,也可以保护用户的隐私。还可以在plist设置当弹出请求时的文字信息。

- startMonitoringVisits

- stopMonitoringVisits

只是看这两个方法真不知是表达什么,顺藤摸瓜,看了delegate,找到了一个新增类CLVisit,官方文档叙述是包含了用户去过一些有趣地方的信息。应该是用户如果去到一些经典或者著名的地方就会触发,就会回调相关的信息,觉得很适合导航类app做广告用。

CLFloor

这是一个新增类,只有一个属性:level,显示当前所在楼层。

3.iOS9新增:

- (void)requestLocation

对于一些不是以定位为核心的app来说,这是一个很好用的api,这个方法会马上更新返回当前的定位信息,只会调用一次,省电省流量。

allowsBackgroundLocationUpdates

这是一个新增属性,决定是否在后台接收定位信息,如果设置为YES需要同时在plist设置UIBackgroundModes。这样当app不在当前运行进入后台后也会接收到定位信息。

综合来看,以后苹果会在室内导航上面下功夫,CLVisit和CLFloor就是为以后的实现做铺垫,不过目前相关api很少,没有多少研究的空间。

推荐阅读更多精彩内容