zoukankan      html  css  js  c++  java
  • iOS地图定位系统语言为英文时,返回中文位置信息

    需要在定位前后对系统语言进行转换:

    #pragma mark - CLLocationManagerDelegate
    
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
        //获取用户位置
        CLLocation *location = [locations lastObject];
        //停止定位
        [_locationManager stopUpdatingLocation];
        
        //当定位成功后,如果horizontalAccuracy大于0,说明定位有效
        if (location.horizontalAccuracy < 0) {
            return;
        }
        //系统语言为英文时返回中文编码
        NSMutableArray *defaultLanguages = [LRH_USERDEFAULT objectForKey:@"AppleLanguages"];
        [LRH_USERDEFAULT setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"];
        
        //逆地理编码
        CLGeocoder *geocoder = [[CLGeocoder alloc]init];
        __weak typeof(self) weakSelf = self;
        [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
            NSString *cityName = @"";
            if (error) {
                LRHLog(@"没有找到此经纬度的地理信息");
            } else {
                CLPlacemark *pmark = [placemarks firstObject];
                cityName = pmark.locality;
            }
            
            if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) {
                [weakSelf.delegate getLocationCityWith:self withCityName:cityName];
            }
            //还原系统语言
            [LRH_USERDEFAULT setObject:defaultLanguages forKey:@"AppleLanguages"];
        }];
    }

     自己写的一个定位管理类:

    //
    //  LRHLocationUtils.h
    //  LRHAPP
    //
    //  Created by ZY on 2017/4/6.
    //  Copyright © 2017年 Vision Credit Ltd. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @class LRHLocationUtils;
    @protocol LRHLocationUtilsDelegate <NSObject>
    
    - (void)getLocationCityWith:(LRHLocationUtils *)locationUtils withCityName:(NSString *)cityName;
    
    @end
    
    @interface LRHLocationUtils : NSObject
    
    + (instancetype)shareManager;
    
    @property (nonatomic,weak) id <LRHLocationUtilsDelegate>delegate;
    @property (nonatomic,copy) NSString *userCitys;
    //开始定位
    - (void)startGetLocation;
    
    @end
    View Code
    //
    //  LRHLocationUtils.m
    //  LRHAPP
    //
    //  Created by ZY on 2017/4/6.
    //  Copyright © 2017年 Vision Credit Ltd. All rights reserved.
    //
    
    #import "LRHLocationUtils.h"
    #import <CoreLocation/CoreLocation.h>
    
    @interface LRHLocationUtils ()<CLLocationManagerDelegate>
    
    @property(nonatomic,strong)CLLocationManager *locationManager;
    
    @end
    
    @implementation LRHLocationUtils
    
    - (void)dealloc{
        _locationManager.delegate = nil;
    }
    
    + (instancetype)shareManager{
        static LRHLocationUtils *locationUtls = nil;
        static dispatch_once_t oncetoken;
        dispatch_once(&oncetoken, ^{
            locationUtls = [[LRHLocationUtils alloc]init];
        });
        return locationUtls;
    }
    
    
    - (instancetype)init{
        self = [super init];
        if (self) {
            _locationManager = [[CLLocationManager alloc]init];
            _locationManager.delegate = self;
            //设置定位精准度
            _locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
            
            if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
                //当用户使用的时候授权
                [_locationManager requestWhenInUseAuthorization];
            }
        }
        return self;
    }
    
    #pragma mark - CLLocationManagerDelegate
    
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
        //获取用户位置
        CLLocation *location = [locations lastObject];
        //停止定位
        [_locationManager stopUpdatingLocation];
        
        //当定位成功后,如果horizontalAccuracy大于0,说明定位有效
        if (location.horizontalAccuracy < 0) {
            return;
        }
        //系统语言为英文时返回中文编码
        NSMutableArray *defaultLanguages = [LRH_USERDEFAULT objectForKey:@"AppleLanguages"];
        [LRH_USERDEFAULT setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"];
        
        //逆地理编码
        CLGeocoder *geocoder = [[CLGeocoder alloc]init];
        __weak typeof(self) weakSelf = self;
        [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
            NSString *cityName = @"";
            if (error) {
                LRHLog(@"没有找到此经纬度的地理信息");
            } else {
                CLPlacemark *pmark = [placemarks firstObject];
                cityName = pmark.locality;
            }
            
            if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) {
                [weakSelf.delegate getLocationCityWith:self withCityName:cityName];
            }
            //还原系统语言
            [LRH_USERDEFAULT setObject:defaultLanguages forKey:@"AppleLanguages"];
        }];
    }
    
    - (void)locationManager:(CLLocationManager *)manager
           didFailWithError:(NSError *)error{
        if (_delegate && [_delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) {
            [_delegate getLocationCityWith:self withCityName:@""];
        }
    }
    
    #pragma mark - private method
    
    - (void)startGetLocation{
        [_locationManager startUpdatingLocation];
    }
    
    @end
    View Code
  • 相关阅读:
    使用KRPano资源分析工具一键下载全景网站切片图
    使用KRPano资源分析工具解密被加密的XML
    数据库---表---增删改与权限
    数据库---表---表操作练习
    数据库---表---完整性约束
    数据库---表---数据类型
    数据库---表操作---增删改查
    数据库---库操作---表操作
    数据库---初识sql语句
    数据库---mysql的介绍和安装
  • 原文地址:https://www.cnblogs.com/Crazy-ZY/p/7115117.html
Copyright © 2011-2022 走看看