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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM