iOS:实现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];
自定义大头针:
- (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;
}
//大头针标注颜色枚举
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; //气泡右视图(多用来显示图片)



#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
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import "MyAnnotation.h" @interface ViewController ()<MKMapViewDelegate>
@property (strong,nonatomic)MKMapView *mapView; //声明地图视图控件
@end
- (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协议,在地图上设置大头针,点击显示具体的位置信息的更多相关文章
- Swift - 使用MapKit显示地图,并在地图上做标记
通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...
- GMap.Net开发之在地图上添加多边形
上一篇介绍了在GMap上添加自定义标签(GMapMarker),这篇介绍在GMap上添加多边形(GMapPolyogn),并且介绍如何在地图上画任意的多边形. 如果已经知道了多边形的各个点的位置,就可 ...
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- 如何在iOS地图上高效的显示大量数据
2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...
- [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]
[转至:http://blog.csdn.net/pjk1129/article/details/17358337] 原文:How To Efficiently Display Large Amoun ...
- iOS开发之在地图上绘制出你运行的轨迹
首先我们看下如何在地图上绘制曲线.在Map Kit中提供了一个叫MKPolyline的类,我们可以利用它来绘制曲线,先看个简单的例子. 使用下面代码从一个文件中读取出经纬度,然后创建一个路径:MKPo ...
- Echarts 设置地图上文字大小及颜色
Echarts 设置地图上文字大小及颜色,效果如下: 上代码:关键代码用红色 series: [ { //name: '香港18区人口密度', type: 'map', mapType: 'jiang ...
- ios开发——实用技术OC篇&地图与定位
地图与定位 11.1 iOS定位服务 11.2 iOS地图 11.3 Web地图 1 iOS定位服务 iOS中有三个定位服务组件: Wifi定位,通过查询一个Wifi路由器的地理位置的信息.比较省电, ...
- iOS开发之引用百度地图SDK(一)-----------SDK开发指南
(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...
随机推荐
- 结对开发----找出“水王"
一.题目 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果 ...
- “我爱淘”冲刺阶段Scrum站立会议4
完成任务: 完成了搜索界面的Activity的编写. 计划任务: 实现数据库的链接,用户可以查到自己需要的书籍的信息. 遇到问题: 数据库的操作,实现查询功能:
- JS多种方法实现随机颜色;
JS随机颜色有很多地方要用到:比如大家看到很多标签连接都是五颜六色.实现随机颜色的方法有多种,下面来看看具体的实现代码: 方法一: var getRandomColor = function() { ...
- JQuery常用实用的事件[较容易忽略的方法]
JQuery常用实用的事件 注:由于JQuery片段较多就没有用插入代码文本插入,请见谅!JQuery 事件处理ready(fn)代码: $(document).ready(function(){ ...
- python 交换变量值
在其他语言中,交换两个变量值的时候,可以这样写: temp = a a = b b = temp 在Python中,我们可以简单的这样写: a,b=b,a 实验如下: >>> a=1 ...
- 使用NPOI和线程池快速加载EXCEL数据
private void FilterData() { List<Task> tasks = new List<Task>(); IWorkbook workbook = Cs ...
- tomcat错误:@HandlesTypes annotation of one or more ServletContentInitializers
项目在别人的机器上运行正常,但是在自己机器上运行出现该错误,所以判断应该是环境配置的问题,通过更换eclipse.更换jdk.更换maven.更换tomcat的不同版本,最终确认是tomcat的问题. ...
- Post 的数据被截断
原因: Form 域 POST 提交数据 100K(可能不是这个值) 限制的解决方案 因为微软这个限制是对表单内每个域(第一个控件)的限制.问题的解决办法是,对于一个需要发送大数据的域,在提交表单 ...
- cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )
Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...
- centos msyql 安装与配置
Mysql具有简单易学.体积小等优点,深受编程开发初学者的喜爱 工具/原料 接入Internet的Centos计算机 安装Mysql 1 Centos 6.6下安装Mysql很简单, yum list ...