亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

講解iOS開發中基本的定位功能實現方法

2020-02-19 15:54:14
字體:
來源:轉載
供稿:網友

IOS與Android系統不同,在使用定位服務時,iOS可以指定定位的方式,下文是武林技術頻道小編為大家整理的關于講解iOS開發中基本的定位功能實現的方法,一起跟著小編的步伐來了解一下吧!

一、簡單說明
?

1.CLLocationManager
?
CLLocationManager的常用操作和屬性
?
開始用戶定位- (void)startUpdatingLocation;
?
停止用戶定位- (void) stopUpdatingLocation;
?
說明:當調用了startUpdatingLocation方法后,就開始不斷地定位用戶的位置,中途會頻繁地調用代理的下面方法


  - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;


每隔多少米定位一次

?

?


  @property(assign, nonatomic) CLLocationDistance distanceFilter;


定位精確度(越精確就越耗電)

?

?


  @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;


?
?
2.CLLocation
?
CLLocation用來表示某個位置的地理信息,比如經緯度、海拔等等
?
(1)經緯度

?

?


  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;


(2)海拔

?

?


  @property(readonly, nonatomic) CLLocationDistance altitude;


(3)路線,航向(取值范圍是0.0° ~ 359.9°,0.0°代表真北方向)

?

?


  @property(readonly, nonatomic) CLLocationDirection course;


(4)行走速度(單位是m/s)

?

?


   @property(readonly, nonatomic) CLLocationSpeed speed;


(5)計算2個位置之間的距離

?

?


  - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location方法


?
?
3.CLLocationCoordinate2D
?
CLLocationCoordinate2D是一個用來表示經緯度的結構體,定義如下

?

?


typedef struct {
?
??????? CLLocationDegrees latitude; // 緯度
?
??????? CLLocationDegrees longitude; // 經度
?
} CLLocationCoordinate2D;


一般用CLLocationCoordinate2DMake函數來創建CLLocationCoordinate2D
?
?
?
二、代碼示例

?

?


//
//? YYViewController.m
//? 18-定位服務
//
//? Created by apple on 14-8-9.
//? Copyright (c) 2014年 yangyong. All rights reserved.
//

?

#import "YYViewController.h"
#import

//需要遵守CLLocationManagerDelegate協議
@interface YYViewController ()
@property(nonatomic,strong)CLLocationManager *locMgr;
@end

@implementation YYViewController
#pragma mark-懶加載
-(CLLocationManager *)locMgr
{
??? if (_locMgr==nil) {
??????? //1.創建位置管理器(定位用戶的位置)
??????? self.locMgr=[[CLLocationManager alloc]init];
??????? //2.設置代理
??????? self.locMgr.delegate=self;
??? }
??? return _locMgr;
}
- (void)viewDidLoad
{
??? [super viewDidLoad];
???
??? //判斷用戶定位服務是否開啟
??? if ([CLLocationManager locationServicesEnabled]) {
??????? //開始定位用戶的位置
??????? [self.locMgr startUpdatingLocation];
??????? //每隔多少米定位一次(這里的設置為任何的移動)
??????? self.locMgr.distanceFilter=kCLDistanceFilterNone;
??????? //設置定位的精準度,一般精準度越高,越耗電(這里設置為精準度最高的,適用于導航應用)
??????? self.locMgr.desiredAccuracy=kCLLocationAccuracyBestForNavigation;
??? }else
??? {//不能定位用戶的位置
??????? //1.提醒用戶檢查當前的網絡狀況
??????? //2.提醒用戶打開定位開關
??? }
???
??? //測試方法,計算兩個位置之間的距離
??? [self countDistance];
}

#pragma mark-CLLocationManagerDelegate
/**
?*? 當定位到用戶的位置時,就會調用(調用的頻率比較頻繁)
?*/
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
??? //locations數組里邊存放的是CLLocation對象,一個CLLocation對象就代表著一個位置
?? CLLocation *loc = [locations firstObject];
???
??? //維度:loc.coordinate.latitude
??? //經度:loc.coordinate.longitude
??? NSLog(@"緯度=%f,經度=%f",loc.coordinate.latitude,loc.coordinate.longitude);
??? NSLog(@"%d",locations.count);
???
??? //停止更新位置(如果定位服務不需要實時更新的話,那么應該停止位置的更新)
//??? [self.locMgr stopUpdatingLocation];
?
}

//計算兩個位置之間的距離
-(void)countDistance
{
??? //根據經緯度創建兩個位置對象
??? CLLocation *loc1=[[CLLocation alloc]initWithLatitude:40 longitude:116];
??? CLLocation *loc2=[[CLLocation alloc]initWithLatitude:41 longitude:116];
??? //計算兩個位置之間的距離
??? CLLocationDistance distance=[loc1 distanceFromLocation:loc2];
??? NSLog(@"(%@)和(%@)的距離=%fM",loc1,loc2,distance);
}

@end


打印查看:

代碼說明:
?
1.關于代理方法
?
  需要設置代理,通過代理告訴用戶當前的位置,有兩個代理方法:
?
  locations參數里面裝著CLLocation對象

?

?

?

其中后者是一個過期的方法,在新的方法(第一個)中使用了一個數組來替代。
?
說明:該方法在當定位到用戶的位置時就會調用,調用比較頻繁
?
注意:不要使用局部變量(創建位置管理器),因為局部變量的方法結束它就被銷毀了。建議使用一個全局的變量,且只創建一次就可以了(使用懶加載)。
?
2.定位的精度

3.如果發現自己的定位服務沒有打開,那么應該提醒用戶打開定位服務功能。
?
4.定位服務是比較耗電的,如果是做定位服務(沒必要實時更新的話),那么定位了用戶位置后,應該停止更新位置。
?
?
?
三、用戶隱私的保護
?

1.權限設置說明
?
從iOS 6開始,蘋果在保護用戶隱私方面做了很大的加強,以下操作都必須經過用戶批準授權
?
(1)要想獲得用戶的位置
?
(2)想訪問用戶的通訊錄、日歷、相機、相冊等
?
當想訪問用戶的隱私信息時,系統會自動彈出一個對話框讓用戶授權

注意:一旦用戶選擇了“Don't Allow”,意味著你的應用以后就無法使用定位功能,且當用戶第一次選擇了之后,以后就再也不會提醒進行設置。
?
因此在程序中應該進行判斷,如果發現自己的定位服務沒有打開,那么應該提醒用戶打開定位服務功能。
?
CLLocationManager有個類方法可以判斷當前應用的定位功能是否可用+ (BOOL)locationServicesEnabled;
?
  常用的方法:截圖告訴用戶,應該怎么打開授權
?
  
?
2.開發者可以在Info.plist中設置NSLocationUsageDescription說明定位的目的(Privacy - Location Usage Description)

說明:這里的定位服務是基于網絡的。通常定位服務可以是基于GPS、基站或者是網絡的。


四、iOS8以來的改進
iOS 8 還提供了更加人性化的定位服務選項。App 的定位服務不再僅僅是關閉或打開,現在,定位服務的啟用提供了三個選項,「永不」「使用應用程序期間」和「始終」。同時,考慮到能耗問題,如果一款 App 要求始終能在后臺開啟定位服務,iOS 8 不僅會在首次打開 App 時主動向你詢問,還會在日常使用中彈窗提醒你該 App 一直在后臺使用定位服務,并詢問你是否繼續允許。在iOS7及以前的版本,如果在應用程序中使用定位服務只要在程序中調用startUpdatingLocation方法應用就會詢問用戶是否允許此應用是否允許使用定位服務,同時在提示過程中可以通過在info.plist中配置通過配置Privacy - Location Usage Description告訴用戶使用的目的,同時這個配置是可選的。
但是在iOS8中配置配置項發生了變化,可以通過配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription來告訴用戶使用定位服務的目的,并且注意這個配置是必須的,如果不進行配置則默認情況下應用無法使用定位服務,打開應用不會給出打開定位服務的提示,除非安裝后自己設置此應用的定位服務。同時,在應用程序中需要根據配置對requestAlwaysAuthorization或locationServicesEnabled方法進行請求。由于本人機器已經更新到最新的iOS8.1下面的內容主要針對iOS8,使用iOS7的朋友需要稍作調整。


//
//? KCMainViewController.m
//? CoreLocation
//
//? Created by Kenshin Cui on 14-03-27.
//? Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

?

#import "KCMainViewController.h"
#import

@interface KCMainViewController (){

??? CLLocationManager *_locationManager;
}

@end

@implementation KCMainViewController

- (void)viewDidLoad {
??? [super viewDidLoad];
???
??? //定位管理器
??? _locationManager=[[CLLocationManager alloc]init];
???
??? if (![CLLocationManager locationServicesEnabled]) {
??????? NSLog(@"定位服務當前可能尚未打開,請設置打開!");
??????? return;
??? }
???
??? //如果沒有授權則請求用戶授權
??? if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined){
??????? [_locationManager requestWhenInUseAuthorization];
??? }else if([CLLocationManager authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){
??????? //設置代理
??????? _locationManager.delegate=self;
??????? //設置定位精度
??????? _locationManager.desiredAccuracy=kCLLocationAccuracyBest;
??????? //定位頻率,每隔多少米定位一次
??????? CLLocationDistance distance=10.0;//十米定位一次
??????? _locationManager.distanceFilter=distance;
??????? //啟動跟蹤定位
??????? [_locationManager startUpdatingLocation];
??? }
}

#pragma mark - CoreLocation 代理
#pragma mark 跟蹤定位代理方法,每次位置發生變化即會執行(只要定位到相應位置)
//可以通過模擬器設置一個虛擬位置,否則在模擬器中無法調用此方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
??? CLLocation *location=[locations firstObject];//取出第一個位置
??? CLLocationCoordinate2D coordinate=location.coordinate;//位置坐標
??? NSLog(@"經度:%f,緯度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
??? //如果不需要實時定位,使用完即使關閉定位服務
??? [_locationManager stopUpdatingLocation];
}

@end


注意:
?
1.定位頻率和定位精度并不應當越精確越好,需要視實際情況而定,因為越精確越耗性能,也就越費電。
?
2.定位成功后會根據設置情況頻繁調用-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations方法,這個方法返回一組地理位置對象數組,每個元素一個CLLocation代表地理位置信息(包含經度、緯度、海報、行走速度等信息),之所以返回數組是因為有些時候一個位置點可能包含多個位置。
?
3.使用完定位服務后如果不需要實時監控應該立即關閉定位服務以節省資源。
?
4.除了提供定位功能,CLLocationManager還可以調用startMonitoringForRegion:方法對指定區域進行監控。

?

上文是講解iOS開發中基本的定位功能實現方法,更多內容請繼續關注武林技術頻道吧!

?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品影片在线观看| 日韩欧美在线免费观看| 欧美理论电影网| 欧美性猛交xxxx久久久| 最近中文字幕mv在线一区二区三区四区| 精品久久久精品| 亚洲自拍偷拍色片视频| 亚洲高清在线观看| 精品久久久久久久久久久久久| 国产精品69久久久久| 精品亚洲一区二区| 久久精品亚洲94久久精品| 亚洲伦理中文字幕| 日韩av综合中文字幕| 成人免费激情视频| 丝袜亚洲欧美日韩综合| 日本亚洲欧洲色| 成人国产在线视频| 国产成人福利网站| 上原亚衣av一区二区三区| 欧美日韩另类视频| 国产精品久久久久久久久久久久久久| 色偷偷偷综合中文字幕;dd| 国产日韩欧美91| 日本亚洲精品在线观看| 国产精品日韩一区| 亚洲国产高潮在线观看| 亚洲国产精品va在线观看黑人| 日韩在线免费视频观看| 亚洲视频综合网| 亚洲电影免费观看高清完整版在线观看| 精品久久久久久中文字幕一区奶水| 日韩精品在线影院| 日本成人黄色片| 欧美日韩在线看| 久久久免费电影| 日韩一级裸体免费视频| 国产日韩av在线播放| 亚洲精品永久免费| 久久精品成人动漫| 91中文精品字幕在线视频| 正在播放国产一区| 亚洲激情电影中文字幕| 欧美激情欧美激情在线五月| 欧美小视频在线| 91高清视频免费| 成人www视频在线观看| 久久精品色欧美aⅴ一区二区| 欧美精品video| 亚洲理论片在线观看| 亚洲精品日韩丝袜精品| 亚洲国产精品电影| 青青精品视频播放| 亚洲精品99久久久久| 欧美黑人极品猛少妇色xxxxx| 亚洲精品视频播放| 91精品国产高清久久久久久| 国产在线视频一区| 久久中文久久字幕| 97在线视频精品| 久青草国产97香蕉在线视频| 国产精品一久久香蕉国产线看观看| 日韩精品黄色网| 精品久久久久国产| 亚洲欧洲日韩国产| 欧美视频精品一区| 欧美极度另类性三渗透| 亚州精品天堂中文字幕| 欧美一性一乱一交一视频| 俺去亚洲欧洲欧美日韩| 久久久久这里只有精品| 亚洲欧美日韩国产中文| 欧美成人一二三| 久久久女人电视剧免费播放下载| 日韩**中文字幕毛片| 91豆花精品一区| 久久久国产精品视频| 久久久视频在线| 日韩欧美一区视频| 亚洲女人被黑人巨大进入al| 国产丝袜视频一区| 国产日韩综合一区二区性色av| 欧美日韩在线观看视频| 亚洲精品资源在线| 日韩成人av一区| 久久久成人精品| 午夜精品蜜臀一区二区三区免费| 欧美色xxxx| 97在线视频免费看| 亚洲国产精品电影在线观看| 国产精品日韩在线| 欧美性视频网站| 91精品视频免费| 国产做受高潮69| 97视频在线观看播放| 亚洲欧美中文在线视频| 91丨九色丨国产在线| 91在线观看免费高清完整版在线观看| 国产精品91久久| 自拍偷拍亚洲欧美| 在线一区二区日韩| 午夜精品一区二区三区在线视频| 中文国产亚洲喷潮| 久久精品视频免费播放| 少妇高潮 亚洲精品| 亚洲欧美在线免费| 国产成人精品国内自产拍免费看| 亚洲激情 国产| 中文字幕成人精品久久不卡| 国产精品偷伦免费视频观看的| 久久人体大胆视频| 69影院欧美专区视频| 欧美激情奇米色| 亚洲国产精品字幕| 久久99国产精品久久久久久久久| 久久成人综合视频| 亚洲国产一区二区三区在线观看| 国产精品高清在线观看| 日韩大陆毛片av| 亚洲欧美在线看| 有码中文亚洲精品| 亚洲免费视频在线观看| 日韩精品中文字幕在线观看| 91亚洲精品久久久久久久久久久久| 亚洲天堂久久av| 亚洲第一男人天堂| 日韩精品中文字幕视频在线| 亚洲精品一区中文| 日本韩国欧美精品大片卡二| 国产综合在线视频| 久久香蕉国产线看观看av| 久久久视频免费观看| 久久精品中文字幕电影| 国产精品久久久一区| 97国产精品免费视频| 亚洲成人激情图| 欧美激情视频播放| 国产成人在线播放| 久久精品成人欧美大片古装| 国产一区二区三区日韩欧美| 亚洲国产精品一区二区三区| 国产成人aa精品一区在线播放| 国产色婷婷国产综合在线理论片a| 91超碰中文字幕久久精品| 国产mv久久久| 日韩美女免费观看| 久久久久久网站| 欧美日韩国产精品一区二区不卡中文| 久久久免费观看视频| 亚洲欧美国产一本综合首页| 国产精品黄色av| 成人情趣片在线观看免费| 久久精品一本久久99精品| 在线观看精品自拍私拍| 欧美性生交xxxxx久久久| 懂色av一区二区三区| 国产成人免费av电影| www.日韩系列| 欧美日韩国产在线播放| 国产精品入口日韩视频大尺度| 上原亚衣av一区二区三区| 国产深夜精品福利| 久久久电影免费观看完整版| 国产性色av一区二区|