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