码迷,mamicode.com
首页 > 其他好文 > 详细

CLLocationManagerDelegate的讲解

时间:2015-08-14 19:09:36      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:ios   cllocationmanager   cllocation   代理   cllocationmanagerdel   

1、//新的方法,登陆成功之后(旧的方法就不管了)
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray<CLLocation *> *)locations
//locationManager:didUpdateLocations:(调用很频繁)
//更新位置的方法之后就调用这个方法,数组中是按照时间的先后顺序,即为将旧的和新的位置放在数组中

2、//与之对应的 登陆失败之后的调用,定位失败了之后
- (void)locationManager:(CLLocationManager *)manager
    didFailWithError:(NSError *)error;

问题1、
发现有的时候更新位置的时候我们停止了相应的更新方法,但是还是打印出两个或者三个更行的位置。
2015-08-14 17:23:09.285 mylocation[450:209668]  location is :<+22.52849988,+113.93162929> +/- 65.00m (speed -1.00 mps / course -1.00) @ 15/8/14 中国标准时间下午5:23:08
2015-08-14 17:23:09.285 mylocation[450:209668]  location is :<+22.52849988,+113.93162929> +/- 65.00m (speed -1.00 mps / course -1.00) @ 15/8/14 中国标准时间下午5:23:08
更新的代码为:
#pragma mark CLLocationManagerDelegate
//定位成功
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *location  = [locations lastObject];
    NSLog(@" location is :%@ ",location.description);
    [self.locationManager stopUpdatingLocation];
}
那是因为,我们将    [self.locationManager stopUpdatingLocation];放在了输出相应的信息之后,当我们停止定位的时候需要一定的时间,这段时间内系统又重新定位了一次或则多次,所以应该停止定位之后再输出,这样就可以只是输出当前的一次更新信息。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    [self.locationManager stopUpdatingLocation];//先停止定位

    CLLocation *location  = [locations lastObject];
    NSLog(@" location is :%@ ",location.description);
}

问题2、用模拟器定位失败
2015-08-14 17:17:17.455 mylocation[2953:98656]  Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
//定位失败之后显示的信息。
解决方法:
1.确定模拟器(手机)已经联网并且允许程序获取地理位置
2.重置地理位置服务或者网络服务
PS:如果是模拟器就果断直接重置模拟器吧  IOS Simulator - Reset Content and Settings..。
这样就重新设置模拟器,模拟器就是初始化的状态。

//方向的更新
- (void)locationManager:(CLLocationManager *)manager
       didUpdateHeading:(CLHeading *)newHeading;

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


- (void)locationManager:(CLLocationManager *)manager
    didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region;

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region;

- (void)locationManager:(CLLocationManager *)manager
    rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region
    withError:(NSError *)error ;

//进入指定区域
- (void)locationManager:(CLLocationManager *)manager
    didEnterRegion:(CLRegion *)region ;

//离开指定的区域
- (void)locationManager:(CLLocationManager *)manager
    didExitRegion:(CLRegion *)region;

//定位失败
- (void)locationManager:(CLLocationManager *)manager
    didFailWithError:(NSError *)error;

//区域定位失败
- (void)locationManager:(CLLocationManager *)manager
    monitoringDidFailForRegion:(CLRegion *)region
    withError:(NSError *)error ;

//改变里授权的状态
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status ;

//开始控制指定的区域
- (void)locationManager:(CLLocationManager *)manager
    didStartMonitoringForRegion:(CLRegion *)region;

//已经停止位置的更更新
- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager ;

//位置定位重新开始定位位置的更新
- (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager ;

//已经完成了推迟的更新
- (void)locationManager:(CLLocationManager *)manager
    didFinishDeferredUpdatesWithError:(NSError *)error;

//就是已经访问过的位置,就会调用这个表示已经访问过,这个在栅栏或者定位区域都是使用到的
- (void)locationManager:(CLLocationManager *)manager didVisit:(CLVisit *)visit;

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

CLLocationManagerDelegate的讲解

标签:ios   cllocationmanager   cllocation   代理   cllocationmanagerdel   

原文地址:http://blog.csdn.net/u012496940/article/details/47665469

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!