注释:
1.大头针 : 就是我们在地图中打的地理标识, 用来记录某个特殊的地点.
2.MKAnnotation 是一个协议, 而不是具体的类, 我们在创建大头针对象类时, 必须遵循该协议.
3.MKAnnotation 协议中有<b> 三个属性 + 一个方法</b>用来设置大头针
//MKAnnotation协议
@protocol MKAnnotation <NSObject>
//属性
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@optional
//属性
@property (nonatomic, readonly, copy, nullable) NSString *title;
@property (nonatomic, readonly, copy, nullable) NSString *subtitle;
//方法
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate NS_AVAILABLE(10_9, 4_0);
@end```
4.注意: 大头针, 只是一个模型, 并不是一个真正的控件, 要写展示大头针必须添加到视图上.
(在具体的使用中, 我们可以使用系统的大头针视图, 也可以使用自定义的大头针视图)
####效果图:
![大头针实例.png](http://upload-images.jianshu.io/upload_images/1803308-5250b09bcd6d43d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####1. 默认大头针使用实例代码
######第一步: 首先我们要创建Annotation类
```code
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
//遵循协议
@interface Annotation : NSObject<MKAnnotation>
//经纬度属性
@property (nonatomic) CLLocationCoordinate2D coordinate;
# CLLocationCoordinate2D是一个结构体对象, 其中有两个属性经度和纬度
typedef struct {
CLLocationDegrees latitude;
CLLocationDegrees longitude;
} CLLocationCoordinate2D;
//标题属性
@property (copy, nonatomic) NSString *title;
//子标题属性
@property (copy, nonatomic) NSString *subtitle;
@end```
######第二步: 在ViewController中, 我们首先初始化一个地图显示视图(基于上一篇文章Senior_MKMapView), 然后创建大头针对象,并添加到地图视图上.
```code
#import "ViewController.h"
//导入地图显示头文件
#import <MapKit/MapKit.h>
//1. 导入大头针类
#import "Annotation.h"
//遵循协议
@interface ViewController ()<MKMapViewDelegate>
//创建地图显示视图
@property (strong, nonatomic) MKMapView *mapView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//初始化
self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
//触摸缩放
self.mapView.zoomEnabled = YES;
//是否可移动
self.mapView.scrollEnabled = YES;
//地图形式
self.mapView.mapType = MKMapTypeStandard;
//设置代理
self.mapView.delegate = self;
//显示用户位置
self.mapView.showsUserLocation = YES;
//添加到视图上
[self.view addSubview:self.mapView];
//2. 调用方法, 实现添加大头针
[self addAnnotation];
}
#创建大头针对象的实现方法
- (void)addAnnotation{
//1. 创建大头针对象
Annotation *annotation = [[Annotation alloc] init];
//2. 指定一个经纬度(大头针对象中有一个经纬度属性)
CLLocationCoordinate2D location = CLLocationCoordinate2DMake(39.9200225351, 116.3968733177);
//3. 设置title和subtitle
annotation.title = @"北京";
annotation.subtitle = @"故宫";
//4. 将创建的经纬度对象,设置为大头针的经纬度
annotation.coordinate = location;
//5. 将大头针添加到视图上显示
[self.mapView addAnnotation:annotation];
}
@end```