• 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
  • 相关阅读:
    打sql server pack4后打开网站报错的解决办法
    北京大学的三角形文章
    一次SQL Server 2000修复实践的说明
    今天重看了几集《将爱情进行到底》
    MakeFile的写法
    [经验杂谈]与大虾对话:领悟设计模式zz
    论函数调用约定(zz)
    用标准模板库STL实现文件比较(zz)
    C++中的虚函数(virtual function)
    为学院科研办做的个小应用管理程序
  • 原文地址:https://www.cnblogs.com/Crazy-ZY/p/7115117.html
Copyright © 2020-2023  润新知