CLLocationManagerDelegate的讲解

1、更新位置的方法之后就调用这个方法,数组中是按照时间的先后顺序,即为将旧的和新的位置放在数组中

//locationManager:didUpdateLocations:(调用很频繁)
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations 
{
    CLLocation *location  = [locations lastObject];
    NSLog(@" location is :%@ ",location.description);
    [self.locationManager stopUpdatingLocation];
}

2、定位失败

- (void)locationManager:(CLLocationManager *)manager
    didFailWithError:(NSError *)error;

3、方向的更新

- (void)locationManager:(CLLocationManager *)manager
       didUpdateHeading:(CLHeading *)newHeading;

4、用于判断是否显示方向的校对

//用于判断是否显示方向的校对,返回yes的时候,将会校对正确之后才会停止
//或者dismissheadingcalibrationdisplay方法解除。
-(BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager;

5、进入指定区域

- (void)locationManager:(CLLocationManager *)manager
    didEnterRegion:(CLRegion *)region ;

6、离开指定的区域

- (void)locationManager:(CLLocationManager *)manager
    didExitRegion:(CLRegion *)region;

7、区域定位失败

- (void)locationManager:(CLLocationManager *)manager
    monitoringDidFailForRegion:(CLRegion *)region
    withError:(NSError *)error ;

8、改变里授权的状态

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status ;

9、开始控制指定的区域

- (void)locationManager:(CLLocationManager *)manager
    didStartMonitoringForRegion:(CLRegion *)region;

10、已经停止位置的更更新

- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager ;

11、位置定位重新开始定位位置的更新

- (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager ;

12、已经完成了推迟的更新

- (void)locationManager:(CLLocationManager *)manager
    didFinishDeferredUpdatesWithError:(NSError *)error;

13、就是已经访问过的位置,就会调用这个表示已经访问过,这个在栅栏或者定位区域都是使用到的

- (void)locationManager:(CLLocationManager *)manager didVisit:(CLVisit *)visit;

写的时候容易遗漏的就是设置代理:
Assigning to 'id' from incompatible type 'ViewController *const __strong'
出现这个错误:是因为有的时候还没有继承相应的代理。


一些区别:可以通过配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription来告诉用户使用定位服务的目的,这个设置的信息是在用户第一次打开应用的app的时候,会弹出的信息显示但是不同的是这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,也无法获取到位置信息,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或requestWhenInUseAuthorization方法进行请求。


开发者可以在info.plist 文件中设置NSLocationUsageDescription 说明定位identifier目的
[Privacy -Location Usage Description] 这个在ios8可以不写
//这是用户的描述,在ios8之前写的。不过现在基本都是8以上了


我是楚简约,感谢您的阅读,

喜欢就点个赞呗,“❤喜欢”,

鼓励又不花钱,你在看,我就继续写~

非用户,可以点右上角的三个“...”,然后"在Safari中打开”,就可以点赞咯~


你可能感兴趣的:(CLLocationManagerDelegate的讲解)