iOS开发-地图篇-定位

    在iOS的开发过程中,会遇到一些有关于定位,导航等开发需求。尤其是在近期,app开发中有关于地图的开发越来越多,因此针对于简单的地图开发,我们还是要进行掌握的。

   首先,我们会使用苹果自带的地图功能进行相关的开发,当然在后期我们也可以用一些国内的地图,例如百度地图等等。

   我个人在学习地图开发的过程中,开始感觉比较繁琐,很多类啊,框架啊,相关的库啊,都记不住。但是只要多加练习其实地图的开发也是比较简单的。 初学者开始学习地图只要掌握地图的简单应用就可以了。

  首先讲一下定位,对于定位我们首先要导入一个库:CoreLoaction.framework

  iOS7 和 iOS8定位的写法有区别 ,iOS8.0之后开启定位需要执行      requestAlwaysAuthorization/requestWhenInUseAuthorization,而且还要配置info.plist。NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription

第一步:我们需要创建一个定位管理器

CLLocationManager * manager = [[CLLocationManager alloc]init];

创建之后还可以设置相关的属性

         //设置定位的经度

        _manager.desiredAccuracy = kCLLocationAccuracyBest;

        

        //设置定位的更新频率 单位为米 在超出此范围之后进行更新

        _manager.distanceFilter = 5;

        

        //同时需要设置开始定位

        [_manager startUpdatingLocation];

第二步:针对于iOS7 和 iOS8的定位方法不同,我总结了一下三种方法。 

方法一:判断版本

   CGFloat systemVersion = [UIDevice currentDevice].systemVersion.floatValue;

    if(systemVersion >= 8.0)

    {

        //当用到的时候进行开启定位

        [self.manager requestWhenInUseAuthorization];

    }

方法二:判断方法能否执行

   if ([self.manager respondsToSelector:@selector(requestWhenInUseAuthorization)])

    {

        //如果能响应 则执行

        [self.manager requestWhenInUseAuthorization];

    }

方法三:判断定位服务是否打开  推荐方法!

 if (![CLLocationManager locationServicesEnabled]) {

        NSLog(@"提示用户打开定位服务");

    }

    else

    {

        //1. 获取当前定位的状态

        CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

        

        //如果定位状态未打开

        if (status == kCLAuthorizationStatusNotDetermined) {

            

            //requestWhenInUseAuthorization  前端定位

            //requestAlwaysAuthorization 前端和后台定位

            [self.manager requestWhenInUseAuthorization];

        }

        //开启定位

        [self.manager startUpdatingLocation];

    }

第三步:当我们解决了版本问题的时候,并成功开启的了定位,那么我们下面就要得到我们当前的坐标位置了。

这个是CLLocationManagerDelegate 中的方法 返回的locations 可以得到我们想要的坐标位置数据

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations 

之后我们会在这个方法中写如下的代码:

//当定位成功之后 这个代理只需要执行一次所有停止位置更新

    

    [manager stopUpdatingLocation];

    

    //获取当前的定位信息

    CLLocation * location = [locations lastObject];

    

    //获取经纬度

    CLLocationCoordinate2D coordinate = location.coordinate;

    

    // longitude 经度 latitude 纬度

    NSLog(@"经度%f 纬度%f",coordinate.longitude,coordinate.latitude);

最后我们就得到了我们当前位置的经纬度,实现了定位的功能。当前的经纬度可以在模拟器的Debug-Loaction中设置。

原文地址:https://www.cnblogs.com/Horkly/p/5339418.html