iOS之地理位置及定位系统 -- 入门笔记
这是因为xcode升级造成的定位权限设置问题。
升级xcode6、xcode7以后打开以前xcode5工程,程序不能定位。工程升级到xcode6或xcode7编译时需要iOS8 要自己写授权,不然没权限定位。
解决方法:
首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
NSLocationWhenInUseUsageDescription //允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription //允许在前、后台获取GPS的描述
设置的图示:
好了,如果设置好了,那就正式进入编码学习吧,首先熟悉苹果提供的关于定位服务相关的类,方法以及属性:
1、定位服务和地图应用的介绍 定位服务: 获取用户当前的位置信息,针对用户的位置信息做相关的数据处理。
地图应用: 根据实际需求展示地图和周边环境信息,基于用户当前位置展示用户所关注的地图位置信息、以及为用户导航。
- 定位服务要掌握的:
- 主要操作的类:CLLocationManager
- 所属库:CoreLocation
- 结构体:CLLocationCoordinate2D(经纬度)、CLCLocationCoorRegion(区域)
- 地图应用需要掌握的:
- 框架:MapKit
- 操作类:MKMapView
2、定位服务
- 属性:
- desiredAccuracy设置定位精确度,这是一个常量属性,一般用best
- distanceFilter 重新定位的最小变化距离
方法:
- 设置什么时候开启定位的状态
- requestAlwaysAuthorization() 始终开启定位
- requestWhenInUseAuthorization() 当app进入前台的时候开启定位(iOS8的新方法)
- 类方法locationServicesEnabled() 是否有定位服务功能(CLLocationManager)
- startUpdatingLocation() 开启定位
- 设置什么时候开启定位的状态
代理:
- 代理的协议:
- 代理的方法:可以直接进入这个库的API查看,只要就是定位错误调用的代理方法,定位成功调用的代理方法等等;
涉及到的对象
- locations: CLLocation 该CLLocation对象的属性:
- coordinate
- longitude/latitude
- coordinate
- locations: CLLocation 该CLLocation对象的属性:
英语词汇积累:
- accuracy 英 'ækjʊrəsɪ n. [数] 精确度,准确性
- filter 英 'fɪltə 滤波器 过滤器;筛选;滤光器 过滤;渗透;用过滤法除去
//
// ViewController.swift
// LocationManager
//
// Created by HEYANG on 16/1/26.
// Copyright © 2016年 HEYANG. All rights reserved.
//import UIKit
// 需要导入CoreLocation框架
import CoreLocationclass ViewController: UIViewController,CLLocationManagerDelegate {
// 声明一个全局变量
var locationManager:CLLocationManager!override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()// 设置定位的精确度
locationManager.desiredAccuracy = kCLLocationAccuracyBest// 设置定位变化的最小距离 距离过滤器
locationManager.distanceFilter = 50// 设置请求定位的状态
if #available(iOS 8.0, *) {
locationManager.requestWhenInUseAuthorization()
} else {
// Fallback on earlier versions
print("hello")
}//这个是在ios8之后才有的// 设置代理为当前对象
locationManager.delegate = self;if CLLocationManager.locationServicesEnabled(){
// 开启定位服务
locationManager.startUpdatingLocation()
}else{
print("没有定位服务")
}}
// 定位失败调用的代理方法
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print(error)
}
// 定位更新地理信息调用的代理方法
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if locations.count > 0
{
let locationInfo = locations.last!
let alert:UIAlertView = UIAlertView(title: "获取的地理坐标",
message: "经度是:\(locationInfo.coordinate.longitude),维度是:\(locationInfo.coordinate.latitude)",
delegate: nil, cancelButtonTitle: "是的")
alert.show()
}
}
}//
// ViewController.m
// LocationManager
//
// Created by HEYANG on 16/1/26.
// Copyright © 2016年 HEYANG. All rights reserved.
//#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
/** 全局定位对象 */
@property (nonatomic,strong)CLLocationManager *locationManager;@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];CLLocationManager* locationManager = [[CLLocationManager alloc] init];
// 设置定位精确度
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// 设置定位变化最小距离
locationManager.distanceFilter = 50;// 设置定位服务的使用状态
[locationManager requestWhenInUseAuthorization];
locationManager.delegate = self;if ([CLLocationManager locationServicesEnabled]) {
[locationManager startUpdatingLocation];
}else{
NSLog(@"本机不支持定位服务功能");
}self.locationManager = locationManager;
}
// 定位失败调用的代理方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"错误信息:%@",error);
}
// 定位数据更新调用的代理方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
if (locations.count > 0) {
CLLocation* location = locations.lastObject;
CLLocationCoordinate2D coordinate2D = location.coordinate;
NSString* message = [NSString stringWithFormat:@"经度:%lf,维度是:%lf",coordinate2D.longitude,coordinate2D.latitude];
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"显示当前位置的经纬度"
message:message delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
[alertView show];}
}@end
iOS之地理位置及定位系统 -- 入门笔记的更多相关文章
- iOS之地理位置及定位系统 -- 入门笔记(用Swift)
前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最常见的就是 ...
- iOS 即时通讯,从入门到 “放弃”?
原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. — ...
- C++ 快速入门笔记:进阶编程
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- ES6入门笔记
ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
随机推荐
- springday03-go2
新建springmvc01项目1.创建项目,导入jar包 拷贝jar/spring/first下的五个spring的jar包,以及jar/spring/mvc下的两个mvcjar包放在lib下 2.创 ...
- SpringMVC配制全局的日期格式
SpringMVC文件配制: <mvc:annotation-driven> <!-- 处理responseBody 里面日期类型 --> <mvc:message-co ...
- repeater做删除前弹窗询问
前台 <asp:LinkButton ID="delLinkButton" runat="server" OnClientClick='return co ...
- fork系统调用(转载)
(1) fork系统调用说明 fork系统调用用于从已存在进程中创建一个新进程,新进程称为子进程,而原进程称为父进程.fork调用一次,返回两次,这两个返回分别带回它们各自的返回值,其中在父进程中的返 ...
- 【HDNOIP】HD201404最短路径
HD201404最短路径 [试题描述] a.b.c是3个互不相等的1位正数,用它们和数字0可以填满一个n行n列的方格阵列,每格中都有4种数码中的一个.填入0的格子表示障碍物,不能属于任何路径.你是否能 ...
- setTimeout() 与 setInterval()
setTimeout() 从载入后延迟指定的时间去执行一个表达式或者是函数; 仅执行一次 ;和window.clearTimeout一起使用. setInterval() 在执行时,它从载 ...
- 加载执行预编译的Sql :prepareStatement
1.获得连接:Connection con = null; con = DBUtil.getConnection(); 2.写sql语句:String sql=""; 3.用连接加 ...
- eclipse Juno Indigo Helios Galileo这几种版本的意思
Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2, 30-06-2006, Callisto projects, 版本代号 Callisto [木卫四,卡里斯托 ] ...
- 源码安装Apache,报错:Cannot use an external APR with the bundled APR-util和httpd: Could not reliably determine the server's fully qualified domain name, using
一.解决APR和APR-util错误: 1.1.安装APR: [root@ganglia httpd-2.2.23]# cd srclib/apr [root@ganglia apr]# ./conf ...
- Intent 转向
Intent intent = new Intent(CardInfoActivity.this, CardRechargeListActivity.class); intent.putExtra(& ...