地图定位(Location Based Service)相关的Framework:CoreLocation.framework, MapKit.framework
定位功能实现
准备工作
- 首先在当前控制器导入:
#import <CoreLocation/CoreLocation.h> - 在iOS8之后要在info.plist加入请求授权key值之后才可以定位:
NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription

简单的一次性定位功能实现
1 | - (void)viewDidLoad { |
定位其它功能详解
- 刚开始定位的时候,代码方法有可能不会调用即没有定位,可以通过选择模拟器的菜单栏:debug - Location - 随便换着切换几个试试,最后选择 Custom-Location
[manager requestAlwaysAuthorization];请求永久授权,app不管在前台还是后天都可以获取用户位置[manager requestWhenInUseAuthorization];请求授权,app只能在前台执行的时候可以获取用户位置。注意:如果你要测试此句代码,并且和上句代码属于同一项目当中;那么你必须要卸载掉你的app,重新授权使用manager.distanceFilter = 100;距离筛选器,当距离超过规定值后调用代理方法,单位:米。注意:在使用这句代码的时候,更新位置的代理方法不能有[manager stopUpdatingLocation];否则会不起作用。在模拟器当中可以修改Custom Location当中的经纬度来测试效果manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;期望精度,在进行GPS导航的时候,用最好的精度值kCLLocationAccuracyBestForNavigation- 用 requestWhenInUseAuthorization app在后台获取不了用户的位置的时候,通过开启一个Bool属性来在后台临时获取用户的位置信息
manager.allowsBackgroundLocationUpdates = true;。注意:此属性在 ios9 后可用, 没有添加key值会报错:reason: 'Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)',为了防止报错需要添加key值,如下所示
1 | 标准用法: |
示意图:
地理编码和反地理编码
- 地理编码:将地名转换成经纬度
- 反地理编码:将经纬度转换成地名
地理编码代码
1 | if (self.placeName.text.length == 0) return; |
反地理编码代码
1 |
|
MKMapView基本使用
MKMapView控件是苹果官方提供的地图控件,是通过国内的高德地图来实现的
准备
- 必须要添加
MapKit.framework框架 - 在使用到 MKMapView的地方导入头文件
#import <MapKit/MapKit.h>,该头文件包含#import <CoreLocation/CoreLocation.h>
基本定位功能实现
1 |
|
地图添加大头针
- MKAnnotationView 注释视图,没有图片,可以自定义
- MKPinAnnotationView 大头针注释视图,系统的大头针图片,自定义图片之后不会显示

添加大头针Demo
ViewController
1 | #import "ViewController.h" |
WSAnnotation
1 | #import <MapKit/MapKit.h> |
WSAnnotationView
1 | #import <MapKit/MapKit.h> |
WSImageAnnotationView
1 | #import <MapKit/MapKit.h> |