如何添加大头针(地标):

通过MapView的addAnnotation方法可以添加一个大头针到地图上

通过MapView的addAnnotations方法可以添加多个大头针到地图上

–(void)addAnnotation:(id <MKAnnotation>)annotation;

说明:需要传入一个遵守了MKAnnotation协议的对象

 

基本步骤为:

<1>新建一个遵守MKAnnotation协议的类:
@interface MyAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end
<2>添加Annotation:
MyAnnotation *anno = [[MyAnnotation alloc] init];
anno.title = @“中国";
anno.subtitle = @“北京”;
//经度和纬度
anno.coordinate = CLLocationCoordinate2DMake(40, 110);
//添加大头针到地图中
[_mapView addAnnotation:anno];
// 让地图挪动到对应的位置(经纬度交叉处)
[_mapView setCenterCoordinate:anno.coordinate animated:YES];

 

自定义大头针:

实现MapView的代理方法

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    static NSString *ID = @"anno";
    MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];
    if (annoView == nil) {
        annoView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];
        // 显示气泡
        annoView.canShowCallout = YES;
        // 设置绿色
        annoView.pinColor = MKPinAnnotationColorGreen;
    }
    return annoView;
}

注意:可以通过设置MapAnnotationView的image属性来自定义大头针显示的图片

 

涉及的几个类一些属性或方法的介绍:

//大头针标注颜色枚举
typedef NS_ENUM(NSUInteger, MKPinAnnotationColor) {
    MKPinAnnotationColorRed = 0,
    MKPinAnnotationColorGreen,
    MKPinAnnotationColorPurple
} ;
//大头针标注视图类
@interface MKPinAnnotationView : MKAnnotationView
@property (nonatomic) MKPinAnnotationColor pinColor; //大头针标注颜色
@property (nonatomic) BOOL animatesDrop;  //是否显示水滴动态
@end
 
//标注视图类
@interface MKAnnotationView : NSView
- (instancetype)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier;   //初始化
@property (nonatomic, readonly) NSString *reuseIdentifier;      //重用标示符
@property (nonatomic, strong) id <MKAnnotation> annotation;  //标注
@property (nonatomic, strong) UIImage *image; //图像
@property (nonatomic) BOOL canShowCallout;  //是否显示气泡
@property (strong, nonatomic) UIView *leftCalloutAccessoryView;   //气泡左视图(多用来显示图片)
@property (strong, nonatomic) UIView *rightCalloutAccessoryView; //气泡右视图(多用来显示图片)

 

 

具体的演示实例如下:

功能:首先创建一个标注在地图上显示当前的区域的名字,然后创建一个长按手势,当在人一个地点长按时,就会在长按的地方自动添加一个大头针标注,并且会显示一个气泡显示图片,地点名字信息可以待定.........

 

前期准备:

1.导入Mapkit框架:

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_#import

2.导入一个图片素材,用来做大头针视图的一个图片显示:

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_#pragma_02

3.自顶一个一个类,这个类实现了<MKAnnotation>协议,自定义类MyAnnotation截图为:

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_显示图片_03

 

代码实现:

1.在自定义类的MYAnnotation.h文件声明大头针标注的属性

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotation : NSObject<MKAnnotation>
@property (assign,nonatomic)CLLocationCoordinate2D coordinate;   //经纬度坐标
@property (copy,nonatomic)NSString *title; //大头针标注标题
@property (copy,nonatomic)NSString *subtitle; //大头针标注子标题
@end

2、在ViewController.m文件中声明地图视图属性,并实现地图视图的协议

#import "ViewController.h"
#import <MapKit/MapKit.h>
#import "MyAnnotation.h"

@interface ViewController ()<MKMapViewDelegate>
@property (strong,nonatomic)MKMapView *mapView;  //声明地图视图控件
@end

3、给指定位置创建一个标注,同时创建长按手势

- (void)viewDidLoad {
    [super viewDidLoad];
    //创建Map实例
    self.mapView = [[MKMapView alloc]initWithFrame:self.view.frame];
    
    //设置地图的类型
    self.mapView.mapType =  MKMapTypeStandard;
    
    //设置地图的代理
    self.mapView.delegate = self;
    
    //将地图视图添加到控制器视图中
    [self.view addSubview:self.mapView];
    
    //创建一个标注
    MyAnnotation *annotation = [[MyAnnotation alloc]init];

 //设置北京的经纬度
    annotation.coordinate = CLLocationCoordinate2DMake(40, 110);
    annotation.title = @"中国";
    annotation.subtitle = @"北京";
    
    //添加标注
    [self.mapView addAnnotation:annotation];
    
    
    //让地图显示标注的区域
    [self.mapView setCenterCoordinate:annotation.coordinate animated:YES];
    
    
    //添加一个长按longPress手势
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
    [self.mapView addGestureRecognizer:longPress];
}

4、处理长按手势事件,创建自定义的大头针标注

-(void)longPress:(UILongPressGestureRecognizer *)sender
{
    //获取当前位置
    CGPoint location = [sender locationInView:self.view];
    
    //经纬度
    CLLocationCoordinate2D coordinate = [self.mapView convertPoint:location toCoordinateFromView:self.mapView];
    
    
    //创建新的标注
    MyAnnotation *annotation = [[MyAnnotation alloc]init];
    annotation.coordinate = coordinate;
    annotation.title = @"新标注";
    annotation.subtitle = @"待开发...";
    
    
    //添加标注
    [self.mapView addAnnotation:annotation];
}

5、实现地图视图的代理方法

#pragma mark -mapView的代理方法

//显示标注和气泡,并在气泡上设置图片

#pragma mark 显示标注视图
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    //设置重用标示符
    static NSString *annotationID = @"annotation";
    
    //先从重用的队列中找
    MKPinAnnotationView *view = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationID];
    
    //没找到就创建
    if (!view)
    {
        view = [[MKPinAnnotationView alloc]init];
    }
    
    //设置属性
    view.annotation = annotation;
    view.canShowCallout = YES;//显示气泡
    view.pinColor = MKPinAnnotationColorGreen;//大头针颜色
    
    //显示图片,取代大头针
    //view.image = [UIImage imageNamed:@"1.png"];
    
    //在气泡视图中显示图片
    view.rightCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.png"]];
    
    return view;
}

//选中标注和取消标注时调用的方法

#pragma mark 选中了标注的处理事件
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    NSLog(@"选中了标注");
}

#pragma mark 取消选中标注的处理事件
-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    NSLog(@"取消了标注");
}

 

演示结果:(选中和取消标注时,输出结果就不打印了)

开始时:                                                    点击大头针标注时:

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_显示图片_04

 

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_#pragma_05

再随意在某一个地方长按时出现一个新的大头这标注       点击大头标注时:

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_显示图片_06

 

ios 地图放大 大头针偏移 centerOffset 苹果地图怎么放大头针_#pragma_07

 

 

 

 

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!