IOS 8 基本定位实现
IOS 8 基本定位实现
钟淳亚 发表于2年前
IOS 8 基本定位实现
  • 发表于 2年前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 由于App需要用户定位信息,在此记录下ios8中基本定位的实现,xcode版本为6.4

首先在项目中导入定位所需的库,Build Phases --> Link Binary With Libraries -->CoreLocation.framework

在Info.plist文件中加入字段NSLocationWhenInUseUsageDescription或者NSLocationAlwaysUsageDescription,前者是应用使用时可定位,后者是后台可定位,根据需要设置,并设置为YES

其次在AppDelegate.m中导入所需头文件,并且遵循定位协议

#import <CoreLocation/CoreLocation.h>
@interface AppDelegate ()<CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@end

可以编写一个函数启动定位,并在didFinishLaunchingWithOptions中调用

- (void)startingLocation {
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.distanceFilter = 10.0f;
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager startUpdatingLocation];
}

实现定位协议方法didUpdateLocations和didFailWithError

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    // 如果需要多次定位则不要此句
    [self.locationManager stopUpdatingLocation];
    
    CLLocation *curLocation = [locations lastObject];
    // 所在位置经纬度
    NSString *latitude = [NSString stringWithFormat:@"%f", curLocation.coordinate.latitude];
    NSString *longitude = [NSString stringWithFormat:@"%f", curLocation.coordinate.longitude];
    // 根据经纬度获得当前城市名
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:curLocation completionHandler:^(NSArray *array, NSError *error) {
        if (array.count > 0) {
            CLPlacemark *placeMark = [array objectAtIndex:0];
            NSString *city = placeMark.locality;
            // 直辖市可能需要通过以下判断获取
            if (!city) {
                city = placeMark.administrativeArea;
            }
            LogBlue(@"定位城市:%@", city);
        }else if (error == nil && [array count] == 0) {
            LogRed(@"%@", @"无任何信息");
        }else if (error != nil) {
            LogRed(@"%@", @"定位错误");
            LogRed(@"%@", error);
        }
    }];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"%@", error);
    if ([error code] == kCLErrorDenied) {
        // 访问被拒绝
        LogRed(@"访问被拒绝");
    }else if ([error code] == kCLErrorLocationUnknown) {
        // 无法获取位置信息
        LogRed(@"无法获取位置信息");
    }
}

最后,如果只需要经纬度怎不需要逆地址解析,如果需要城市名要注意获得的城市后面带有“市”,需根据需求自行处理。

标签: IOS8 定位
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 3
码字总数 1315
×
钟淳亚
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: