美文网首页iOS
CLLocationManagerDelegate的讲解

CLLocationManagerDelegate的讲解

作者: 楚简约 | 来源:发表于2017-04-28 17:37 被阅读0次

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

    //locationManager:didUpdateLocations:(调用很频繁)
    - (void)locationManager:(CLLocationManager *)manager
         didUpdateLocations:(NSArray<CLLocation *> *)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<CLLocationManagerDelegate>' from incompatible type 'ViewController *const __strong'
    出现这个错误:是因为有的时候还没有继承相应的代理。


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


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


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

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

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

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


    相关文章

      网友评论

        本文标题:CLLocationManagerDelegate的讲解

        本文链接:https://www.haomeiwen.com/subject/izlazttx.html