OC开发_整理笔记—— CoreLocation(1)基本使用
一、Core Location介紹
1、我們經常會用到了地圖和定位功能,在iOS開發中,要想加入這2大功能,必須基于2個框架進行開發
Map Kit :用于地圖展示
Core Location :用于地理定位
2、所以我們會經常聽到2個熱門專業術語
LBS :Location Based Service
SoLoMo :Social Local Mobile(索羅門)
3、CoreLocation框架使用須知
使用Core Location首先導入主頭文件 #import <CoreLocation/CoreLocation.h>
CoreLocation框架中所有數據類型的前綴都是CL
CoreLocation中使用CLLocationManager對象來做用戶定位
4、而我們調用其實就是三個步驟
(1?創建CoreLocation的管理者:mgr
??(2?成為Corelocation管理者的代理,監聽位置的獲取
(3 開始監聽
?
二、話不多說,先貼代碼
這是一個簡單的獲取當前地理位置經緯度的代碼:
1 // 2 // ViewController.m 3 // 地圖初識 4 // 5 // Created by zzl on 15/8/27. 6 // Copyright (c) 2015年 zzl. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #import <CoreLocation/CoreLocation.h> 11 12 @interface ViewController ()<CLLocationManagerDelegate> 13 14 /** 管理者設置為全局*/ 15 @property(nonatomic,strong) CLLocationManager *mgr; 16 17 @end 18 19 @implementation ViewController 20 21 #pragma mark -- 懶加載 22 23 -(CLLocationManager *)mgr 24 { 25 if (!_mgr) { 26 _mgr = [[CLLocationManager alloc]init]; 27 } 28 return _mgr; 29 } 30 #pragma mark -- life cycle 31 32 - (void)viewDidLoad { 33 [super viewDidLoad]; 34 35 //1、創建CoreLocation的管理者:mgr 36 37 //2、成為Corelocation管理者的代理,監聽位置的獲取 38 self.mgr.delegate = self; 39 40 /* 41 iOS 7 只要開始定位,系統就會自動要求用戶對你的應用程序授權,但是從iOS8開始,想要定位必須先主動請求 42 在iOS8中不僅僅需要自動請求,還需要在info.list中配置屬性才能彈出窗口授權 43 44 NSLocationWhenInUserDescription 允許在前臺獲取GPS描述 45 NSLocationAlwaysInUserDescription 允許在后臺獲取GPS描述 46 */ 47 48 //2.1、 判斷是不是iOS8 49 if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) 50 { 51 NSLog(@"8.0+"); 52 53 //一授權成功就會改變通知代理 54 [self.mgr requestAlwaysAuthorization]; // 請求前臺和后臺定位權限 55 //[self.mgr requestWhenInUseAuthorization]; // 請求前臺定位權限 56 } 57 else 58 { 59 NSLog(@"7.0-"); 60 [self.mgr startUpdatingLocation]; 61 } 62 63 //3、開始監聽 64 } 65 66 #pragma mark -- CoreLocation Delegate 67 68 /** 69 * 授權狀態改變的時候會被調用 70 * 71 * @param manager 調用者 72 * @param status 調用的狀態 73 */ 74 -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 75 { 76 77 // CLAuthorizationStatus 78 /* 79 用戶從未選擇過權限 80 kCLAuthorizationStatusNotDetermined 81 82 無法使用定位服務,該狀態用戶無法改變 83 kCLAuthorizationStatusRestricted 84 85 用戶拒絕該應用使用定位服務,或是定位服務總開關處于關閉狀態 86 kCLAuthorizationStatusDenied 87 88 已經授權(廢棄) 89 kCLAuthorizationStatusAuthorized 90 91 用戶允許該程序無論何時都可以使用地理信息 92 kCLAuthorizationStatusAuthorizedAlways 93 94 用戶同意程序在可見時使用地理位置 95 kCLAuthorizationStatusAuthorizedWhenInUse*/ 96 97 if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) 98 { 99 NSLog(@"授權成功"); 100 101 [self.mgr startUpdatingLocation]; 102 } 103 else if(status == kCLAuthorizationStatusNotDetermined) 104 { 105 NSLog(@"等待用戶授權"); 106 } 107 else{ 108 NSLog(@"授權失敗"); 109 } 110 } 111 112 /** 113 * 獲取到位置信息之后就會去調用(如果不做控制會頻繁調用,浪費電量) 114 * 115 * @param manager 調用者 116 * @param locations 獲取到的地理位置信息 117 */ 118 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 119 { 120 NSLog(@"%s",__func__); 121 122 CLLocation *local = [locations lastObject]; 123 124 //打印經緯度 125 NSLog(@"%f,%f",local.coordinate.latitude,local.coordinate.longitude); 126 127 128 } 129 @end?
三、一些注意的點
1、設置管理者、設置代理協議、開始監聽三個步驟
2、iOS8以后因為隱私問題,需要主動去向用戶申請地圖的使用權限,需要另外判斷
(1?首先要判斷是不是iOS8以后
(2?然后 調用requestAlwaysAuthorization請求用戶的同意
(3 用戶同意之后會自動調用代理方法?didChangeAuthorizationStatus
(4 我們可以在上面的代理方法中判斷權限的狀態,當權限的狀態是成功之后,我們就可以調用?startUpdatingLocation 開始監聽了
(5 同時,我們還是需要在info.list文件中增加一個項:“NSLocationAlwaysUsageDescription”,值可以任意
(6 當然你以為已經成功的時候可能還有會iOS8獨特的BUG在等著你,可能需要設置當前的一些運動狀態,才會有不斷調用的響應
3、locationManager代理方法一經啟動定位會被頻繁的調用,需要控制調用的次數
? 例如:每隔多少米定位一次, 只有水平方向超過該值時才會重新定位
?// mgr.distanceFilter = 100;
?
總結
以上是生活随笔為你收集整理的OC开发_整理笔记—— CoreLocation(1)基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好玩儿的手机游戏(九游手机游戏)
- 下一篇: 保存cisco设备配置