CLLocationManager
CLLocationManager的常用操作
開始更新用戶位置
-?(void)startUpdatingLocation;
停止更新用戶位置
-?(void)stopUpdatingLocation;
當調(diào)用了startUpdatingLocation方法后丹弱,就開始不斷地請求弧圆、刷新用戶的位置,一旦請求到用戶位置就會調(diào)用代理的下面方法
-?(void)locationManager:(CLLocationManager*)managerdidUpdateLocations:(NSArray*)locations;
locations參數(shù)里面裝著CLLocation對象
為了嚴謹起見玄妈,最好在使用定位功能之前判斷當前應用的定位功能是否可用
CLLocationManager有個類方法可以判斷當前應用的定位功能是否可用
+ (BOOL)locationServicesEnabled;
@property(assign,nonatomic)CLLocationDistancedistanceFilter;
每隔多少米定位一次
@property(assign,nonatomic)CLLocationAccuracydesiredAccuracy;
定位精確度(越精確就越耗電)
CLLocation
CLLocation用來表示某個位置的地理信息侦镇,比如經(jīng)緯度灵疮、海拔等等
@property(readonly,nonatomic)CLLocationCoordinate2Dcoordinate;
經(jīng)緯度
@property(readonly,nonatomic)CLLocationDistancealtitude;
海拔
@property(readonly,nonatomic)CLLocationDirectioncourse;
路線,航向(取值范圍是0.0°~359.9°壳繁,0.0°代表真北方向)
@property(readonly,nonatomic)CLLocationSpeedspeed;
移動速度(單位是m/s)
用-?(CLLocationDistance)distanceFromLocation:(constCLLocation*)location方法可以計算2個位置之間的距離
iOS 9.0 定位補充
iOS9.0如果當前處于前臺授權狀態(tài)震捣,默認是不可以后臺獲取用戶位置。但可以設置以下屬性為YES闹炉,就可以繼續(xù)獲取后臺位置蒿赢,但是會出現(xiàn)藍條
@property(assign,nonatomic) BOOLallowsBackgroundLocationUpdates
使用注意:必須設置對應的后臺模式:locationupdates
iOS9.0可以單次請求用戶位置
- (void)requestLocation
-(void)locationManager:(nonnullCLLocationManager*)managerdidUpdateLocations:(nonnullNSArray *)locations//成功調(diào)用
p-(void)locationManager:(nonnullCLLocationManager*)managerdidFailWithError:(nonnullNSError*)error//失敗調(diào)用
CLLocationCoordinate2D
CLLocationCoordinate2D是一個用來表示經(jīng)緯度的結構體,定義如下
typedef?struct{
CLLocationDegreeslatitude;//緯度
CLLocationDegreeslongitude;//經(jīng)度
}CLLocationCoordinate2D;
一般用CLLocationCoordinate2DMake函數(shù)來創(chuàng)建CLLocationCoordinate2D
CLGeocoder
使用CLGeocoder可以完成“地理編碼”和“反地理編碼”
地理編碼:根據(jù)給定的地名渣触,獲得具體的位置信息(比如經(jīng)緯度羡棵、地址的全稱等)
反地理編碼:根據(jù)給定的經(jīng)緯度,獲得具體的位置信息
地理編碼方法
-?(void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;
反地理編碼方法
-?(void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocodeCompletionHandler
當?shù)乩韁反地理編碼完成時嗅钻,就會調(diào)用CLGeocodeCompletionHandler
typedef void(^CLGeocodeCompletionHandler)(NSArray*placemarks, NSError *error);
這個block傳遞2個參數(shù)
error:當編碼出錯時(比如編碼不出具體的信息)有值
placemarks:里面裝著CLPlacemark對象
CLPlacemark
CLPlacemark的字面意思是地標皂冰,封裝詳細的地址位置信息
@property(nonatomic,readonly)CLLocation*location;
地理位置
@property(nonatomic,readonly)CLRegion*region;
區(qū)域
@property(nonatomic,readonly)NSDictionary*addressDictionary;
詳細的地址信息
@property(nonatomic,readonly)NSString*name;
地址名稱
@property(nonatomic,readonly)NSString*locality;
城市