標籤:des blog io os ar strong sp div on
關於CLLocationManager擷取地理位置遇到的一些小事;
項目使arc
第一步:擷取是否允許定位
-(BOOL)IsLocationServicesEnabled{ /** * [CLLocationManager locationServicesEnabled] 系統設定允許定位服務是否開啟 * [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied APP是否開啟定位服務 */ return ([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied);}
第二步:開始定位,建立全域變數 (個人理解:如果CLLocationManager的屬性不是全域的在ARC項目中,出了函數體 局部變數就會被release)
@property (nonatomic, strong) CLLocationManager *userLocation;
-(void)getUserLocationInfomation{ if ([self IsLocationServicesEnabled]) { if (!self.userLocation) { self.userLocation = [[CLLocationManager alloc]init]; } self.userLocation.delegate = self; //選擇定位的方式為最優的狀態 self.userLocation.desiredAccuracy = kCLLocationAccuracyBest; //發生事件的最小距離間隔 self.userLocation.distanceFilter = kCLDistanceFilterNone; [self.userLocation startUpdatingLocation]; }}
第三部分:delegate回調
#pragma locationManager delegate-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; if (locationAge > 180.0) return; // 測試該水平精度是否有效 if (newLocation.horizontalAccuracy < 0) return; // 寫你的代碼 現在拿到的newLocation是有效
[self.userLocation stopUpdatingLocation];
self.userLocation.delegate = nil;
}-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ }
如何使iOS擷取的地理位置有效