MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点
http://blog.iosxcode4.com/archives/74
☉限制:必须将iPhone的操作系统更新到ios3.0版本,开发使用的SDK也要是SDK 3.0才有內建Mapkit Framework。
☉效果画面:
☉步骤说明:
在 地图上每一个记号,都是一個MKAnnotationView,也就是UI。而每一個MKAnnotationView都需要有对应的资料 MKAnnotation,这是Protocal,也就是存储每個座坐标所需要用到的资料的地方。因此,我们要先建立一個使用MKAnnotation的类别。
依照iPhone开发者文件的说明。这个Protocal需要声明三个属性和一个初始化方法。三个属性分別是coordinate、title、subtitle,和一个方法initWithCoords。
下面是MKAnnotation类的代码 POI.h
#import #import #import @interface POI : NSObject {CLLocationCoordinate2D coordinate;NSString *subtitle;NSString *title; }@property (nonatomic,readonly) CLLocationCoordinate2D coordinate; @property (nonatomic,retain) NSString *subtitle; @property (nonatomic,retain) NSString *title;-(id) initWithCoords:(CLLocationCoordinate2D) coords;@end
下面是MKAnnotation类的代码 POI.m
#import "POI.h"@implementation POI@synthesize coordinate,subtitle,title;- (id) initWithCoords:(CLLocationCoordinate2D) coords{self = [super init];if (self != nil) {coordinate = coords; }return self;}- (void) dealloc{[title release];[subtitle release];[super dealloc]; }@end
声明了符合MKAnnotation Protocal的类别后,我们就要在Google Map上建立坐标点。在iPhone上先是Google Map的程序可以參考上一篇博文
接下來,
第一步: 我声明了一个函数createMapPoint创建坐标点。在这个用到了我们在前面声明类别POI(这个符合MKAnnotation Protocal的类别),我们实例化一个POI,接着将坐标点所需的经纬度,标题,子标题等信息都放进去。接着调用
[mapView addAnnotation:poi];
把我們所建立的POI加入地图(MKMapView)的Annotation集合中。放入集合的只是坐标点的资料,这個時候还沒有真正建立坐标点
以下是函数createMapPoint的代码:
#import "POI.h"-(void*) createMapPoint:(MKMapView *)mapView coordinateX:(double)coorX coordinateY:(double)coorYTitle:(NSString*)title Subtitle:(NSString*)subtitle{if(mapView!=nil){//set POI lat and lngCLLocationCoordinate2D p1;POI *poi;if(coorX && coorY){p1.latitude=coorX;p1.longitude = coorY;poi = [[POI alloc] initWithCoords:p1]; if(title!=NULL)poi.title=title;if(subtitle!=NULL)poi.subtitle=subtitle;[mapView addAnnotation:poi];[poi release];}}return NULL; }
第二部:参考MKMapView的说明文件可以看到viewForAnnotation这个方法,这是MKMapView实际建立坐标点的地方。MKMapView类别在渲染地图的时候会按照Annotation集合中的资料建立坐标点。
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{//方法一:using default pin as a PlaceMarker to display on mapMKPinAnnotationView *newAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation1"];newAnnotation.pinColor = MKPinAnnotationColorGreen;newAnnotation.animatesDrop = YES;//canShowCallout: to display the callout view by touch the pinnewAnnotation.canShowCallout=YES;UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];newAnnotation.rightCalloutAccessoryView=button; return newAnnotation;//方法二:using the image as a PlaceMarker to display on map/*MKAnnotationView *newAnnotation=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation1"];newAnnotation.image = [UIImage imageNamed:@"icon.png"];newAnnotation.canShowCallout=YES;return newAnnotation;*/ }
Annotation 集合中有几个坐标点viewForAnnotation方法就会被执行几次。因此每次viewForAnnotation被执行,我们都要实例化一个MKAnnotationView。 MKMapView接收到MKAnnotationView的实例就会将它先是在地图上。在上面代码中使用了 MKPinAnnotationView是集成自MKAnnotationView,作用就是在地图上显示一个大头钉。你可以用
annotationView.pinColor = MKPinAnnotationColorGreen;
可以设置大头钉的颜色,不过只有红色、紫色、绿色三种。
newAnnotation.canShowCallout=YES;
设定在点大头钉的时候效果。 第10行到第12行动态建立了一個DetailDisclousue类型的按钮,替这个按钮设置了一个UIControlEventTouchUpInside事件,并将它放入气泡视图AccessoryView中。最后,将建立好的坐标回传给 MapView。
被注释的方法二 是直接使用MKAnnotationView建立坐标点,并且设置它的image属性。
- (void)checkButtonTapped:(id)sender event:(id)event{UIAlertView *tmp= [[UIAlertView alloc] initWithTitle:@"hi!" message:@"test" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[tmp show];[tmp release]; }
MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点相关推荐
- 【Qt系列】实时显示鼠标位于QGraphicsView或QGraphicsScene坐标点
演示效果 坐标点的显示在右下角. 前言 在Graphics View框架结构主要包含三个类:场景类(QGraphicsScene).视图类(QGraphicsView)和图元类(QGraphicsIt ...
- echarts 折线图上标记独立坐标点
实现下图所示功能: 在多条折线图中,给定一个独立的点坐标,在图上进行显示(图一),点击该坐标点显示该坐标的位置信息(图二) 具体实现代码: html: <div id="main&qu ...
- matlab gui 鼠标选择矩形区域 返回鼠标坐标点
1.鼠标选择矩形区域 --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, event ...
- 用c++定义两个坐标点,计算两点间距离;进而计算线段的面积
//本程序有三个层次 //第一层(define_class.h):构造坐标点类,颜色和宽度的结构体,线段类 //第二层(function.h):对上一层声明的函数进行定义 //第三层(distance ...
- c++求两点的距离利用友元_用c++定义两个坐标点,计算两点间距离;进而计算线段的面积...
//本程序有三个层次 //第一层(define_class.h):构造坐标点类,颜色和宽度的结构体,线段类 //第二层(function.h):对上一层声明的函数进行定义 //第三层(distance ...
- cesium地图添加坐标点
附上api文档链接 showPoint(){this.pointLayer= new Cesium.CustomDataSource("pointLayer");cViewer.d ...
- ArcGIS根据经纬度在地图上添加坐标点
文章目录 前言 步骤 1.添加底图 2.制作经纬度表格 3.添加数据 4.显示xy数据 (1)显示XY数据对应的字段 (2)添加地理坐标系 5.添加经纬网等作图要素 结果展示与修改 总结 前言 常常需 ...
- python点击屏幕坐标_通过Python,如何获取鼠标在屏幕上的X、Y轴坐标点
最近在开发基于模拟器的微信自动添加好友工具时,需要获取模拟器中相应按钮,在当前屏幕中的X.Y轴坐标点.先前都是通过"Ctrl+Alt+A"截屏的方式 获取.如下图红框部分所示: 由 ...
- 在一个圆内随机取若个坐标点(python)
在一个指定位置的圆内随机取若干个坐标点,num为数量,radius为圆的半径,(centerx, centery)为圆心坐标. 方法一:根据条件判断的随机点产生方法 import random imp ...
- Pyecharts Geo在地图上添加坐标点
Pyecharts Geo在地图上添加坐标点 添加坐标点 输入坐标点 将坐标点添加入系列并配置系列 加一点点小细节给图片美化一下 让坐标点不显示value 调整图例位置,向右靠拢 改变图例选中与非选中 ...
最新文章
- mysqldump定时备份数据库
- 三大趋势在移动互联网发展
- 工业级以太网交换机与普通商用交换机相比,在性能上有哪些优势?
- html 页面怎么加载富文本,UILabel加载html富文本
- nginx重启命令方法(linux,centos,ubuntu)总结
- linux 命令find
- 如何进行自动化PDF测试?这里有真正简单明了的方法
- WiFiDisplay
- python自动添加微信好友_Python实现微信自动通过好友申请并发送加群链接!
- Mac谷歌浏览器添加JSONView的插件以提高开发的效率
- 微信小程序名片版需要服务器吗,【微信小程序】壹脉智能名片小程序源码V3.5.0+前端+后端+无插件【包更新】...
- sqlite3:sqlite3_column 函数
- 2. 企业发放的奖金根据利润提成. 利润(I)低于或等于10万元时, 奖金可提10%;利润高于10万元, 低于20万元时, 低于10万元的部分按10%提成,...
- Beyond compare4 激活和秘钥
- win7开启uasp协议_移植win8通用USB驱动到win7上并开启UASP功能!
- 每个程序员都应该知道的那些事儿
- python外星人入侵添加音效_python外星人入侵游戏打包
- 匈牙利算法解指派问题(Java代码)
- IT行业里的热门技术
- Oracle小知识点之temp表空间
热门文章
- Wireshark实战分析之IP协议(二)
- 基于连接跟踪机制的状态防火墙的设计与实现
- Linux Workqueue
- Linux kernel路由机制分析(上)
- [linux-内核]内核日志及printk结构浅析
- PHP下添加PDO_Pgsql扩展
- 九宫幻方(蓝桥)深搜
- 如何将response里header的date转化为当地时间_将产品20元利润提升到2000元,靠的是卖体验!...
- 电脑手写输入法_5款好用的拼音输入法软件推荐
- 学生如何免费使用Jetbrains旗下包含Pycharm等开发工具(中文详细教程)