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中设置。

  • 相关阅读:
    window下安装QT出错解决方案
    wiin10下VS2015+opencv3.4.0-extra_modules+CMake配置
    可重入、线程安全辨析与场景举例
    WPF仿网易云音乐系列(三、播放进度条+控制按钮)
    WPF仿网易云音乐系列(二、歌单创建窗口+登录设置模块)
    WPF仿网易云音乐系列(一、左侧菜单栏:Expander+RadioButton)
    WPF仿网易云音乐系列(序)
    C# WPF仿360安全卫士11
    crontab的语法规则格式(每分钟、每小时、每天、每周、每月、每年定时执行 规则)
    Pymysql 连接 Mysql 数据库及增删改查操作
  • 原文地址:https://www.cnblogs.com/Horkly/p/5339418.html
Copyright © 2011-2022 走看看