我是CLLocationManager,我可以取得手機所處地理相關的資訊,包含所在座標
我是CLLocationManagerDelegate,我定義了處理CLLocationManager的委外工作,以處理接收地理資訊後的工作
CLLocationManager:「那我們合作吧,我取得資訊後,在委派給實作CLLocationManagerDelegate的物件,以處理取得地理資訊後的工作。」
第1步:建立一個名為"CLLocationManager_CLLocationManagerDelegate"的"Single View Application"專案。
第2步:加入Label以顯示經緯度
- 加入Label,並設立Outlet - locationLabel
第3步:加入CoreLocation.framework函數庫
- 選取專案
- 選取TARGETS的CLLocationManager_CLLocationManagerDelegate專案
- 選Build Phases
- 選Link Binary with Libraries
- 並點選"+"號
- 搜尋CoreLocation
- 選取CoreLocation.framework後點選"Add"
第4步:引用<CoreLocation/CoreLocation.h>
- 於ViewController.m檔中透過#import引用CoreLocation.h檔
#import <CoreLocation/CoreLocation.h>
第5步:實作CCLocationManagerDelegate
- 於ViewController.h實作CCLocationManagerDelegate協定
@interface ViewController : UIViewController <cllocationmanagerdelegate>
@property (strong, nonatomic) IBOutlet UILabel *locationLabel;
@end
- 於ViewController.m實作locationManager:didUpdateLocations:方法,以在取得經緯度後顯示經緯度資訊
ViewController.m
//透過委派,實作經緯度更新
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//第0個位置資訊,表示為最新的位置資訊
CLLocation * location = [locations objectAtIndex:0];
//取得經緯度資訊,並組合成字串
NSString * str = [[NSString alloc] initWithFormat:@"緯度:%f, 經度:%f"
, location.coordinate.latitude
, location.coordinate.longitude];
//顯示在label上
[self.locationLabel setText:str];
}
第6步:取得CCLocationManager物件並委派
- 於ViewController.h宣告locationManager實體變數,以在放CCLocationManager物件
ViewController.h
//實作CLLocationManagerDelegate協定
@interface ViewController : UIViewController <CLLocationManagerDelegate>
{
CLLocationManager * locationManager;
}
@property (strong, nonatomic) IBOutlet UILabel *locationLabel;
@end
- 於ViewController.m中,建立CCLocationManager物件,並存放在locationManager實體變數中
- 並委派工作予self - ViewController
- 傳送startUpdatingLocation訊息,開始取得經緯資訊
- (void)viewDidLoad
{
[super viewDidLoad];
//建立CLLocationManger,
//並存於locationManager實體變數中
locationManager = [[CLLocationManager alloc] init];
//委派予self
locationManager.delegate = self;
//傳送startUpdatingLocation訊息,
//開始更新訊息
[locationManager startUpdatingLocation];
}
第7步:執行
- 執行後在Simulaotor上選Debug,在選Location\City Run,表示會以走路的方式模擬手機所在位置,如此就可取得位置變動的資訊,接著即可看到經緯度隨時間一再的變更
檔案連結:CLLocationManager_CLLocationManagerDelegate.zip
更多CLLocationManagerDelegate的資訊:
- https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html