在ios8.0以上獲取經緯度時,需要申請授權,否則不能定位
第一步:
在 HomeViewController.m
@interfaceHomeViewController ()<CLLocationManagerDelegate>
{
//定位
CLLocationManager *_locationManager;//用於獲取位置
CLLocation *_checkLocation;//用於保存位置信息
double _latitude;//經度
double _longitude;//維度
CLLocationManager *_locationManager;//用於獲取位置
CLLocation *_checkLocation;//用於保存位置信息
double _latitude;//經度
double _longitude;//維度
}
第二步:
//設置定位
-(void)setupLocationManager{
_latitude = LATITUDE_DEFAULT;//設置默認的值
_longitude =LONGITUDE_DEFAULT;
_locationManager = [[CLLocationManageralloc]init];
if ([CLLocationManagerlocationServicesEnabled]) {
NSLog(@"開始定位");
_locationManager.delegate = self;
// distanceFilter是距離過濾器,為了減少對定位裝置的輪詢次數,位置的改變不會每次都去通知委托,而是在移動了足夠的距離時才通知委托程序
//它的單位是米,這里設置為至少移動1000再通知委托處理更新;
_locationManager.distanceFilter = 200.0;
// kCLLocationAccuracyBest:設備使用電池供電時候最高的精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//ios8+以上要授權,並且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以為空
if (IOS_VERSION >=8.0) {//ios8+,不加這個則不會彈框
[_locationManagerrequestWhenInUseAuthorization];//使用中授權
[_locationManagerrequestAlwaysAuthorization];
}
[_locationManagerstartUpdatingLocation];
}else{
_locationManager = [[CLLocationManageralloc]init];
if ([CLLocationManagerlocationServicesEnabled]) {
NSLog(@"開始定位");
_locationManager.delegate = self;
// distanceFilter是距離過濾器,為了減少對定位裝置的輪詢次數,位置的改變不會每次都去通知委托,而是在移動了足夠的距離時才通知委托程序
//它的單位是米,這里設置為至少移動1000再通知委托處理更新;
_locationManager.distanceFilter = 200.0;
// kCLLocationAccuracyBest:設備使用電池供電時候最高的精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//ios8+以上要授權,並且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以為空
if (IOS_VERSION >=8.0) {//ios8+,不加這個則不會彈框
[_locationManagerrequestWhenInUseAuthorization];//使用中授權
[_locationManagerrequestAlwaysAuthorization];
}
[_locationManagerstartUpdatingLocation];
}else{
NSLog(@"定位失敗,請確定是否開啟定位功能");
}
}
第三步
#pragma mark - CLLocationManagerDelegate
//ios 6.0sdk以上
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations{
NSLog(@"didUpdateToLocation+++");
//此處locations存儲了持續更新的位置坐標值,取最后一個值為最新位置,如果不想讓其持續更新位置,則在此方法中獲取到一個值之后讓locationManager stopUpdatingLocation
CLLocation *cl = [locationslastObject];
_latitude = cl.coordinate.latitude;
_longitude = cl.coordinate.longitude;
NSLog(@"緯度--%f",_latitude);
NSLog(@"經度--%f",_longitude);
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"定位失敗");
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations{
NSLog(@"didUpdateToLocation+++");
//此處locations存儲了持續更新的位置坐標值,取最后一個值為最新位置,如果不想讓其持續更新位置,則在此方法中獲取到一個值之后讓locationManager stopUpdatingLocation
CLLocation *cl = [locationslastObject];
_latitude = cl.coordinate.latitude;
_longitude = cl.coordinate.longitude;
NSLog(@"緯度--%f",_latitude);
NSLog(@"經度--%f",_longitude);
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"定位失敗");
}
這時運行程序,發現還是沒有打印出經緯度信息,這是因為還需要在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以為空