iOS9下有关CoreLocation学习一

来源:互联网 发布:淘宝美工详情页套版 编辑:程序博客网 时间:2024/05/29 10:03

CoreLocation


注意iOS8后包括iOS9.0等在运行程序后模拟器并没有弹出是否允许定位的警示框的解决办法

    //添加下面两行代码    [self.locMgr requestAlwaysAuthorization];//允许前后台程序定位    [self.locMgr requestWhenInUseAuthorization];//允许程序前台运行的时候定位

在info.plist文件中加入以下两个属性

  • NSLocationWhenInUseUsageDescription
  • NSLocationAlwaysUsageDescription

如下图片所示

这里写图片描述

注意:后面的value可以选择性的填写。

源码如下:(待完善…)

////  ViewController.m//  CoreLocationTest////  Created by LoveQiuYi on 16/2/22.//  Copyright © 2016年 LoveQiuYi. All rights reserved.//#import "ViewController.h"#import <CoreLocation/CoreLocation.h>/** *  实现CLLocationManagerDelegate协议的对象可以处理CLLocationManager的定位事件 */@interface ViewController ()<CLLocationManagerDelegate>@property (nonatomic, strong) CLLocationManager * locMgr;@end@implementation ViewController-(CLLocationManager *)locMgr{    if (!_locMgr) {        //创建一个定位管理器类        self.locMgr = [[CLLocationManager alloc]init];        //设置代理        self.locMgr.delegate = self;        //定位精确度设置->隔多远的距离定位一次        self.locMgr.desiredAccuracy = kCLLocationAccuracyBest;//最好的,最理想的        /*几种精确度详细情况*/        //         kCLLocationAccuracyBestForNavigation // 最适合导航        //         kCLLocationAccuracyBest; // 最好的        //         kCLLocationAccuracyNearestTenMeters; // 附近10米        //         kCLLocationAccuracyHundredMeters; // 100米        //         kCLLocationAccuracyKilometer; // 1000米        //         kCLLocationAccuracyThreeKilometers; // 3000米    }    return _locMgr;}- (void)viewDidLoad {    [super viewDidLoad];    //判断系统定位服务有没有打开        if (![CLLocationManager locationServicesEnabled]) {            NSLog(@"没有定位 或者没有打开定位");            //引导用户去打开定位服务        }    [self.locMgr requestAlwaysAuthorization];    [self.locMgr requestWhenInUseAuthorization];    //获取定位信息    [self.locMgr startUpdatingLocation];}#pragma mark - CLLocationManagerDelegate方法//定位到用户的位置的时候就会调用这个方法->调用次数频繁-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{    //获取当前的位置    CLLocation * currentLocation = [locations lastObject];    //输出当前位置的经度纬度高度    NSLog(@"纬度是%f,经度是%f,高度是%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude,currentLocation.altitude);    //停止获取定位信息    [self.locMgr stopUpdatingLocation];}//获取定位信息失败的时候调用-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{    NSLog(@"调用失败");}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

更多解释:http://stackoverflow.com/questions/24062509/location-services-not-working-in-ios-8

注意:

1.当系统的定位服务没有开启的时候,运行程序会弹出警告框提示说去设置中打开定位服务。
2.当你需要在模拟器中去模拟用户的位置改变的时候在模拟器的菜单栏的debug选项中Location中选择customLocation,改变这个值就可以改变模拟器的定位位置。

0 0
原创粉丝点击