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
  • 相关阅读:
    炫酷风扇
    linux 安装wordpress 无故往外发送大量垃圾邮件
    四大行及邮储微信银行体验
    房屋抵押合同及契税缴纳办事指南(参考)
    wordpress搬家到 linode 步骤简析
    linux mysql无故无法启动了,centos 7
    淘宝轮播JS
    curl模拟带验证码的登录
    php正则表达式,在抓取内容进行匹配的时候表现不稳定
    Js的闭包,这篇写的是比较清晰明了的
  • 原文地址:https://www.cnblogs.com/Crazy-ZY/p/7115117.html
Copyright © 2011-2022 走看看