日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC开发_整理笔记—— CoreLocation(1)基本使用

發布時間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。