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

通过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框架:
2.导入一个图片素材,用来做大头针视图的一个图片显示:
3.自顶一个一个类,这个类实现了<MKAnnotation>协议,自定义类MyAnnotation截图为:
 
代码实现:
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(, );
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:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息的更多相关文章

  1. Swift - 使用MapKit显示地图,并在地图上做标记

    通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...

  2. GMap.Net开发之在地图上添加多边形

    上一篇介绍了在GMap上添加自定义标签(GMapMarker),这篇介绍在GMap上添加多边形(GMapPolyogn),并且介绍如何在地图上画任意的多边形. 如果已经知道了多边形的各个点的位置,就可 ...

  3. iOS进阶_地图上定位的标志——大头针

    一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...

  4. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  5. [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]

    [转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...

  6. iOS开发之在地图上绘制出你运行的轨迹

    首先我们看下如何在地图上绘制曲线.在Map Kit中提供了一个叫MKPolyline的类,我们可以利用它来绘制曲线,先看个简单的例子. 使用下面代码从一个文件中读取出经纬度,然后创建一个路径:MKPo ...

  7. Echarts 设置地图上文字大小及颜色

    Echarts 设置地图上文字大小及颜色,效果如下: 上代码:关键代码用红色 series: [ { //name: '香港18区人口密度', type: 'map', mapType: 'jiang ...

  8. ios开发——实用技术OC篇&地图与定位

    地图与定位 11.1 iOS定位服务 11.2 iOS地图 11.3 Web地图 1 iOS定位服务 iOS中有三个定位服务组件: Wifi定位,通过查询一个Wifi路由器的地理位置的信息.比较省电, ...

  9. iOS开发之引用百度地图SDK(一)-----------SDK开发指南

    (void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...

随机推荐

  1. SqlServer正在执行的sql语句

    SELECT [Spid] = session_Id ,ecid ,[Database] = DB_NAME(sp.dbid) ,[User] = nt_username ,[Status] = er ...

  2. 团队开发---NABC分析

    我们的软件初步构想的是版主同学们解决宿舍订桶装水的问题,随着夏季的来临,桶装水的需求量日益加大,而我们订水的过程中常常会遇到这样或那样的问题.再次我只对我们项目中可以直观的看到今日卖家总库存水量和剩余 ...

  3. 在Mac中如何显示和隐藏文件

    1.显示Mac隐藏文件的命令: 在终端中输入"defaults write com.apple.finder AppleShowAllFiles YES":  鼠标单击窗口左上角 ...

  4. CentOS6.5 安装JDK1.7详细步骤参考

    一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK. 首先查看Linux自带的JDK是否已安装. 输入如下命令,查看已经安装的JAVA版本信息. 输入如下命令,查看JD ...

  5. Memcached常用命令及使用说明

    一.存储命令 存储命令的格式: 1 2 <command name> <key> <flags> <exptime> <bytes> < ...

  6. JS 学习笔记--7---正则表达式

    正则表达式中的内容很多,也很深,下面只是一些基本的知识点,练习中使用的浏览器是IE10,若有不当处请各位朋友指正,我会在第一时间修改错误之处. 匹配的概念:是包含的意思,不是相等的意思 1.正则表达式 ...

  7. PKUSC滚粗记

    本来想考得这么烂还是别写了,后来想想毕竟是我高中难得的一次经历,靠脑子记的话我这脑残患者将来肯定会忘了啊……QwQ 好像跟我一样用这个题目的神犇都签了一本QwQ Day 0 来的路上我校其他三位OIe ...

  8. 【BZOJ】【3164】【HEOI2013】Eden的博弈问题

    树形DP 这题在考场上直接写的TreeDP……当时也没想出一个像样的暴力来对拍……好像只能这么直接做了……? 都说是博弈树了,转移关系都给的这么直接了……也没啥难度了吧= =(怪不得大家都不愿意写题解 ...

  9. 【POJ】【2891】Strange Way to Express Integers

    中国剩余定理/扩展欧几里得 题目大意:求一般模线性方程组的解(不满足模数两两互质) solution:对于两个方程 \[ \begin{cases} m \equiv r_1 \pmod {a_1} ...

  10. python抓取汇率

    # -*- coding: utf-8 -*- """ 获取实时汇率 Created on Fri Oct 18 13:11:40 2013 @author: alala ...