您的位置:首页 > 移动开发 > IOS开发

iOS定位获取城市名

2016-07-16 17:30 393 查看
在项目中经常需要获取用户的位置信息,这就涉及到了定位,这里举个简单的例子——定位获取城市名,来归纳coreLocation的一些基本用法。

1.在iOS中如果需要使用定位服务,需要导入定位的框架



定位主要用到一个CLLocationManager对象及它的代理方法,所以在需要的地方设置一个manager对象,并设置其代理,要继承CLLocationManagerDelegate协议.实现代理方法。





3.iOS6以上,苹果对用户的隐私做了加强,所有的定位操作需要得到用户的允许。



所以我们在使用前,需要判断是否得到用户允许



4.通过相关的代理方法获取经纬度,进而转为城市名

- (void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations

{

CLLocation *loc = [locations firstObject];

// 获取当前所在的城市名

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

//根据经纬度反向地理编译出地址信息

[geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *array, NSError *error)

{

if (array.count > 0)

{

CLPlacemark *placemark = [array objectAtIndex:0];

//NSLog(@%@,placemark.name);//具体位置

//获取城市

NSString *city = placemark.locality;

if (!city) {

//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)

city = placemark.administrativeArea;

}

cityName = city;

[self loadWeather:city];

NSLog(@”定位完成:%@”,cityName);

}else if (error == nil && [array count] == 0)
{
NSLog(@"No results were returned.");
}else if (error != nil)
{
NSLog(@"An error occurred = %@", error);
}
//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
[manager stopUpdatingLocation];
}];


}

5.定位失败后也需要关闭定位

- (void)locationManager:(CLLocationManager *)manager

didFailWithError:(NSError *)error {

[manager stopUpdatingLocation];

}

注意

1.iOS8对定位进行了一些修改,其中包括定位授权的方法,CLLocationManager增加了下面的两个方法:

(1)始终允许访问位置信息

(void)requestAlwaysAuthorization;

(2)使用应用程序期间允许访问位置数据

(void)requestWhenInUseAuthorization;

2、在Info.plist文件中添加如下配置:

(1)NSLocationAlwaysUsageDescription

(2)NSLocationWhenInUseUsageDescription



到这里基本的定位城市是可以实现的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息