zoukankan      html  css  js  c++  java
  • 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中设置。

  • 相关阅读:
    设计实现业务系统中的用户权限管理
    海量数据的存储和访问解决方案
    Windows2003 IIS6.0配置主机头,一机多站
    web.config(2)
    web.config(1)
    如何查看windows下哪些端口被哪些进程正在监听
    net开发人员应该知道
    异步与多线程的区别(异步是目的,多线程是实现它的一种方式,异步的优先级有时候比主线程还高)
    如何检查Android网络连接状态
    android WIFI检测与设置
  • 原文地址:https://www.cnblogs.com/Horkly/p/5339418.html
Copyright © 2011-2022 走看看