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