地理定位:需要实例化一个manger,然后调用startUpdatingLocation进行连续定位,在- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations的回调方法里面可以获取到locations的数据,再对数据进行处理。
通过block可以将回调方法里的数据进行回传,这样就能在一个方法里面完成位置获取和对数据的操作,方便代码的阅读。
首先定义一个block(_locationManager是CLLocationManager实例化的对象)
typedef void(^FetchLocationCallback)(CLLocation *location, NSError *error);
FetchLocationCallback _block;
// 获取本地坐标的方法
- (void)currentLocation:(FetchLocationCallback)complete {
_block = complete;
[_locationManager startUpdatingLocation];
}
// 开始定位后的回调函数
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *rLocation = locations[0];
if (_block) _block(rLocation, nil);
[_locationManager stopUpdatingLocation];
}
这样直接调用currentLocation方法就可以直接对定位数据进行操作,不用满屏幕找定位的回调方法
// 调用定位的方法
[self currentLocation:^(CLLocation *location, NSError *error) {
NSLog(@"%@",location);
}];