CoreLocation实现定位和导航功能还是非常简单的,基本思路是:

1.导入<CoreLocation/CoreLocation.h>头文件

2.使用该框架内的导航管理者,创建该导航管理者对象 - CLLocationManager

3.想要实现导航定位功能,必须先让控制器成为代理,实现其关于导航定位的代理方法即可

4.开始定位

想要开始定位或者导航,上面4个步骤缺一不可,具体实现Demo如下:

//
// ViewController.m
// 导航
//
// Created by sleeping sun on 16/7/5.
// Copyright © 2016年 sleeping sun. All rights reserved.
// #import "ViewController.h"
#import <CoreLocation/CoreLocation.h> @interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic,strong) CLLocationManager *manager;
@property (nonatomic,strong) CLLocation *previousLocation;
@property (nonatomic,assign) NSTimeInterval sumTime;
@property (nonatomic,assign) CLLocationDistance sumDistance;
@property (nonatomic,assign) CGFloat averSpeed;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 1.创建定位管理者
CLLocationManager *manager = [[CLLocationManager alloc] init]; // 2.设置代理
manager.delegate = self; // 3.判断设备
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
NSLog(@"ios8之后版本");
// 向用户发送请求
/*
在Info.plist文件中添加如下配置:
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription
*/
[manager requestAlwaysAuthorization];
} // 4.定位精度 - 定位精度越高,耗电量越大
/*
extern const CLLocationAccuracy kCLLocationAccuracyBest;
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
*/
manager.desiredAccuracy = kCLLocationAccuracyBest; // 5.定位频率 - 控制定位频率,每X米定位一次
manager.distanceFilter = 1; // 6.开始定位
[manager startUpdatingLocation]; // 7.持有定位管理者
self.manager = manager;
} #pragma mark - 代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
// 1.计算两个点之间的距离
// 1.1.获取最后一个点的位置
CLLocation *newLocation = [locations lastObject]; // 1.2.判断如果第一个点有值,执行以下操作
if (self.previousLocation) {
// 计算两次的距离(米)
CLLocationDistance distance = [newLocation distanceFromLocation:self.previousLocation]; // 计算两次之间的时间
NSTimeInterval dTime = [newLocation.timestamp timeIntervalSinceDate:self.previousLocation.timestamp]; // 计算速度(M/S)
CGFloat speed = distance / dTime; // 2.计算总时间 - 路程 - 平均速度
// 2.1.总时间
self.sumTime += dTime; // 2.2.总路程
self.sumDistance += distance; // 2.3.平均速度
self.averSpeed = self.sumDistance / self.sumTime; NSLog(@"行驶距离为:%f米,时间:%f秒,速度:%f米/秒",distance,dTime,speed);
NSLog(@"行驶总路程为:%f米,总时间:%f秒,平均速度:%f米/秒",self.sumDistance,self.sumTime,self.averSpeed);
}
self.previousLocation = newLocation;
}
@end

  注意点:在iOS8开始,苹果对用户的隐私非常重视,所以在ios8开始,想要获得用户的授权,必须手动给用户发送授权请求:

1.无论该应用处于前台后台,都发送位置请求

- (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0) __TVOS_PROHIBITED;

Requests permission to use location services whenever the app is running.

需要在Info.plist文件当中进行配置,配置信息如下:NSLocationAlwaysUsageDescription,string字符串可以随意给。

2.当应用处于前台,发送位置请求  

- (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);

  Requests permission to use location services while the app is in the foreground.

需要在Info.plist文件当中进行配置,配置信息如下:NSLocationWhenInUseUsageDescription,string字符串可以随意给。

CoreLocation导航Demo的更多相关文章

  1. 实现百度地图导航Demo的语音播报功能

    上文中实现了在本地导入百度地图导航Demo,那么在此基础上如何实现导航的语音播报呢? 一.为该应用申请语音播报(也叫注册) http://developer.baidu.com/map/index.p ...

  2. Java程序员的日常 —— 响应式导航Demo

    这两天想要做响应式的页面,于是本着重复造轮子的想法,模仿Bootstrap官网,精简了一个响应式导航的Demo. 效果 代码 <!DOCTYPE html> <html> &l ...

  3. html——导航demo

    通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  4. CSS——tab导航demo

    问题总结: 1.ul要比外套div宽度的值大一点 2.ul需要往左移动1px 3.外套的div设置overflow隐藏 解决抖动: 1.li宽度设置98px,padding左右值1px,hover之后 ...

  5. CSS——新浪导航demo

    主要运用的dispaly将a变成行内块,再用padding撑开宽度. <!DOCTYPE html> <html lang="en"> <head&g ...

  6. 【iOS】7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  7. 百度地图SDK下载以及创建应用(申请Key)和本地导入Demo

    一.百度地图SDK下载 http://lbsyun.baidu.com/sdk/download?selected=location 选择全部,然后分别下载开发包.示例代码.类参考. 二.创建应用(申 ...

  8. 3D立体菜单导航

    今天在微博里面看到别人分享的一个立体效果,我觉得挺好的,就拿下来自己存着,万一以后用到. 效果如下: index.html <!DOCTYPE html> <html > &l ...

  9. 关于百度地图导航AndroidSDK的初始化问题

    使用百度地图有一段时间了,导航是一个一直困扰我的问题.今天刚发现百度地图的导航SDK并不是对Android6.0版本不兼容.而是对某一部分手机不兼容,准确的说是对X64或X86的cpu不兼容.下载百度 ...

随机推荐

  1. WAS下获取包路径下所有类

    最近做javaweb项目的混淆工作,用到proguard,该工具混淆.jar文件比较方便,故把所有项目代码和配置文件打成jar包, 生成的jar包经过proguard处理后,再次打包(解决progua ...

  2. openssl 安装

    六.运行“nmake -f ms\ntdll.mak install”安装编译后的OpenSSL到指定目录. 七.查看安装结果C:\usr\local\ssl或C:\openssl-0.9.8.e下包 ...

  3. Android项目能运行,上传svn后再下载却不能运行

    今天遇到一个比较奇怪的问题,android项目上传到svn之前,可以运行,但是上传到svn后再check, 就出错. 搜索了一下,发现真的解决了问题. svn 不知道是出于什么原因,不能上传.so文件 ...

  4. mysql事物处理

    mysql事物主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你既要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等.这样,这些数据库操作语句就构成一个事 ...

  5. DECLARE CONTINUE HANDLER FOR NOT FOUND

    1.解释: 在mysql的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND. 它的含义是:若没有数据返回,程序继续,并将变量IS_FOUND设为 ...

  6. 用jquery制作加载条

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Fragment 之 PagerAdapter

    package com.edaixi.main.adapter; import android.content.Context; import android.support.v4.view.Page ...

  8. [汇编语言]-第九章 根据位移进行转移的jmp指令 段内短转移 段内近转移 段间转移(远转移) 转移的目的地址在指令中,在寄存器中,在内存中的jmp指令

    1- jmp为无条件转移指令,可以只修改IP, 也可以同时修改CS和IP jmp指令要给出两种信息: (1) 转移的目的地址 (2) 转移的距离(段间转移, 段内转移, 段内近转移) 2- 依据位移进 ...

  9. Android的消息机制

    一.简介 ①.我们不能在子线程中去访问UI空控件,这是时候只能通过Handler将更新UI的操作放到主线程中去执行 ②.Handler的组成:messageQueue和Looper的支持 ③.Mess ...

  10. MYSQL 加密的 3 类方法

    背景: 若你想要储存一些由可能包含任意字节值的加密函数返回的结果,使用BLOB列而不是 CHAR 或VARCHAR 列,从而避免由于结尾空格的删除而改变一些数据值的潜在问题. 这一句话来自官方文件,记 ...