1. MKMapView学习笔记(转)
  2. 一.基本知识
  3. 目前主流的智能手机大部分都支持GoogleMap地图程序,而手机上的地图程序确实能给我们的出行带来很大的方便。在iPhone中利用MapKit框架可以很方便的显示Google地图,并且可以在地图上添加标注。
  4. 二.具体介绍
  5. 1.MKMapView的显示
  6. (1)创建MKMapView
  7. CGRect rect = CGRectMake(0, 20, 320, 460);
  8. MKMapView *mapView = [[MKMapView alloc] initWithFrame:rect];
  9. (2)设定经纬度
  10. CLLocationCoordinate2D theCoordinate;
  11. theCoordinate.latitude=24.148926;
  12. theCoordinate.longitude=120.715542;
  13. (3)设定显示范围
  14. MKCoordinateSpan theSpan;
  15. theSpan.latitudeDelta=0.1;
  16. theSpan.longitudeDelta=0.1;
  17. (4)设置地图显示的中心及范围
  18. MKCoordinateRegion theRegion;
  19. theRegion.center=theCoordinate;
  20. theRegion.span=theSpan;
  21. (5)设置地图显示的类型及根据范围进行显示
  22. [mapView setMapType:MKMapTypeStandard];
  23. [mapView setRegion:theRegion];
  24. 完成这些步骤,再把mapView添加到当前view中就可以显示了。
  25. 2.在MKMapView上添加标注
  26. (1)和标注相关的类及协议
  27. (a)MKAnnotation Protocol
  28. 标注必须实现这个协议,有三个属性,coordinate,title和subtitle,其中coordinate属性必须设置。
  29. @property (nonatomic, readonly) CLLocationCoordinate2D coordinate
  30. (b)MKAnnotationView
  31. 设置好Annotation后就可以用这个把标注在地图上显示出来,
  32. - (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
  33. 其比较重要的属性有
  34. @property (nonatomic, retain) UIImage *image
  35. 自定义在地图上标注的图片
  36. @property (nonatomic) BOOL canShowCallout
  37. 设置点击后能否弹出标注
  38. @property (retain, nonatomic) UIView *rightCalloutAccessoryView
  39. property (retain, nonatomic) UIView *leftCalloutAccessoryView
  40. 设置在标注的左右边点击后进一步弹出附属的View
  41. (c)MKPinAnnotationView
  42. 这是以大头针的方式显示标注,继承自MKAnnotationView,同时添加了两个属性
  43. @property (nonatomic) MKPinAnnotationColor pinColor
  44. 设置大头针的颜色,有红绿紫三种颜色可选择
  45. @property (nonatomic) BOOL animatesDrop
  46. 设置大头针是否以掉下来的动画方式显示
  47. (2)在地图上添加Annotation的步骤
  48. (a)创建一个实现MKAnnotation协议的类,在该类的初始化函数中给其coordinate属性设置
  49. (b)用上述方法创建Annotation
  50. (c)把创建的Annotation用addAnnotation的方法添加到MapView中
  51. (d)实现MKMapViewDelegate代理,在代理函数
  52. - (MKAnnotationView *)mapView:(MKMapView *)mView viewForAnnotation:(id <MKAnnotation>)annotation中把Annotation以MKPinAnnotationView或MKAnnotationView的方式标注在地图上上显示。
  53. 一、创建、添加和删除注解
  54. 1、创建注解:
  55. LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:nameString latitue:[latitudeString floatValue] longitude:[longitudeString floatValue]];
  56. aLocationObject._subTitleString = addressString;
  57. 2、添加注解:
  58. 先构建一个注解数组 NSMutableArray *_mapAnnotations;
  59. 然后
  60. [self._mapAnnotations addObject:aLocationObject];
  61. [self._mapView addAnnotations:self._mapAnnotations];
  62. 3、删除注解:
  63. 删除注解可执行 removeAnnotation:一次只删除一个注解,或者执行 removeAnnotation:删除一个数组中的所有项。
  64. 如果需要使地图视图回到无注解状态,可执行:
  65. [self._mapView removeAnnotations:self._mapView.annotations];
  66. 删除其中全部注解,MKMapView 的 annotations 属性获取了所有注解的数组,然后从地图上全部删除。
  67. 二、注解视图
  68. 注解对象并非视图,是描述注解的抽象类。注解视图是属于 MKAnnotationView 的子类 MKPinAnnotationView,当地图通过 addAnnotation:或 addAnnotations:添加了注解后,MKMapViewDelegate 协议的委托方法 - (void)mapView:(MKMapView *)mapViewdidAddAnnotationViews:(NSArray *)views 就会通知委托,可以在此回调方法里设置注解视图,如设置大头针颜色、添加附属按钮等,例:
  69. - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
  70. {
  71. // Initialize each view
  72. for (MKPinAnnotationView *mkaview in views)
  73. {
  74. // 当前位置 的大头针设为紫色,并且没有右边的附属按钮
  75. if ([mkaview.annotation.title isEqualToString:@"当前位置"])
  76. {
  77. mkaview.pinColor = MKPinAnnotationColorPurple;
  78. mkaview.rightCalloutAccessoryView = nil;
  79. continue;
  80. }
  81. // 其他位置的大头针设为红色,右边添加附属按钮
  82. mkaview.pinColor = MKPinAnnotationColorRed;
  83. UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
  84. mkaview.rightCalloutAccessoryView = button;
  85. }
  86. }
  87. 三、注解视图 MKPinAnnotationView 的几个属性说明
  88. newAnnotation.animatesDrop = YES;  // 大头针掉落的动画开启,NO-关闭
  89. newAnnotation.canShowCallout=YES;  // 控制轻击按钮是否生成一个注解视图,默认为Yes-开启
  90. newAnnotation.pinColor    // 设置大头针颜色,一共有三种颜色:红色(MKPinAnnotationColorRed),绿色(MKPinAnnotationColorGreen),紫色(MKPinAnnotationColorPurple)
  91. 四、自动显示注解视图(Callout)
  92. - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
  93. {
  94. 。。。。。。
  95. / 自动显示 Callout
  96. _myAnnotation = annotation;
  97. [self performSelector:@selector(showCallout) withObject:selfafterDelay:0.1];
  98. return newAnnotation;
  99. }
  100. - (void)showCallout {
  101. [self._mapView selectAnnotation:_myAnnotation animated:YES];
  102. }
  103. 正向、反向地理编码
  104. (1)正向 (根据地理位置得到位置的坐标信息)
  105. - (void)geocodeAddressDictionary:(NSDictionary *)addressDictionary completionHandler:(CLGeocodeCompletionHandler)completionHandler;
  106. - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
  107. - (void)geocodeAddressString:(NSString *)addressString inRegion:(CLRegion *)region completionHandler:(CLGeocodeCompletionHandler)completionHandler;
  108. (2)反向 (根据坐标信息 得到城市等地理信息)
  109. - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
  110. Cocoa Touch 没有提供地图注解类,只定义了一个 MKAnnotation 协议。要创建地图注解,必须设计符合 MKAnnotation 协议的类,该类需要一个 CLLocationCoordinate2D coordinate 属性,以及 title 和 subtitle 实例方法,
  111. 一. 设计注解类:
  112. 例,注解(大头针)类:
  113. .h
  114. #import <MapKit/MapKit.h>
  115. @interface LocationObject : NSObject <MKAnnotation> {
  116. CLLocationCoordinate2D coordinate;
  117. NSString *_titleString; //title值
  118. NSString *_subTitleString;
  119. float _latitude; // 经度值
  120. float _longitude; //纬度值
  121. }
  122. @property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
  123. @property float _latitude; // 经度值
  124. @property float _longitude; //纬度值
  125. @property (nonatomic, copy) NSString *_titleString; //title值
  126. @property (nonatomic, copy) NSString *_subTitleString;
  127. - (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude;
  128. @end
  129. ---------------------
  130. .m
  131. @implementation LocationObject
  132. @synthesize coordinate,_latitude,_longitude,_titleString,_subTitleString;
  133. - (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude
  134. {
  135. if(self=[super init])
  136. {
  137. self._titleString = atitle;
  138. self._latitude = alatitude;
  139. self._longitude = alongitude;
  140. }
  141. return self;
  142. }
  143. - (CLLocationCoordinate2D)coordinate;
  144. {
  145. CLLocationCoordinate2D currentCoordinate;
  146. currentCoordinate.latitude = self._latitude ;
  147. currentCoordinate.longitude = self._longitude;
  148. return currentCoordinate;
  149. }
  150. // required if you set the MKPinAnnotationView's "canShowCallout" property to YES
  151. - (NSString *)title
  152. {
  153. return self._titleString;
  154. }
  155. // optional
  156. - (NSString *)subtitle
  157. {
  158. return _subTitleString;
  159. }
  160. - (void)dealloc
  161. {
  162. [_titleString release];
  163. [_subTitleString release];
  164. [super dealloc];
  165. }
  166. @end

ios 地图 自定义标注相关推荐

  1. 百度地图自定义标注点

    百度地图自定义标注点 //创建点 var point = new BMap.Point(109.49926175379778, 36.60449676862417); //创建自定义标 //参数1:自 ...

  2. 地图标注源码 php,jQuery百度地图自定义标注信息代码

    jQuery百度地图自定义标注信息代码是一款简单实用的百度地图api标注联系地址名称电话等信息代码. new BaiduMap({ id: "container2", title: ...

  3. Swift之高德地图自定义标注弹出气泡样式

    在用到地图类的sdk,sdk自带的样式必定不能满足开发者的需求,于是开发者不得不进行自定义,由于官方同样是object-c 版语法,不得不将其转为swift语法,以满足项目需求. 新建两个类 Cust ...

  4. iOS中设置百度地图自定义标注图片,自定义泡泡

    #pragma mark - BMKMapViewDelegate // 根据anntation生成对应的View - (BMKAnnotationView *)mapView:(BMKMapView ...

  5. 百度地图 --- 自定义标注点

    例子 – 百度地图 api 示例 百度地图标注 api 地址 思路 优先引入script 百度地图对应的 api,下方源码是js引入,想用在其他项目方法类似. 在 script 标签里写逻辑,在地图上 ...

  6. 百度地图自定义标注样式

    实现效果图 标注样式的自定义 // 百度地图marker样式 let icon1 = new BMap.Icon(require('../src/assets/nationMap/marker1.pn ...

  7. android 百度地图 自定义地图标注,百度地图自定义标注

    步骤:① 定义构造函数并继承Overlay,通过构造函数参数可以传递一些自由的变量.设置自定义覆盖物对象的prototype属性为Overlay的实例,以便继承覆盖物基类. functionCompl ...

  8. 百度地图API : 自定义标注图标

    通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置, 也可以使用marker.setIcon()方法. <!DOCTYPE html> ...

  9. Echarts显示自定义标注点/地图map引导线

    Echarts显示自定义标注点/地图map引导线 先贴效果.这里实现了 1.地图上县区名的显示,鼠标移入显示相应的项目数(如下图东源县) 2.地图上增加自定义地图(这里增加了没有的高新区&市辖 ...

最新文章

  1. CentOS 6.x使用yum快速安装MySQL 5.5
  2. nodejs中npm常用命令
  3. Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞
  4. 将方法定义在prototype上的好处
  5. 安卓手机运行git和python操作指南-有手机就能写代码了
  6. baidumap vue 判断范围_vue 数据渲染
  7. Arduino笔记-Arduino UNO与WeMos D1串口通信(数据交互)
  8. LNMP架构的简单应用--部署论坛
  9. android ppt 自动播放视频,ppt如何循环播放,ppt如何添加视频设置自动播放(ppt转换成视频)...
  10. TIT 计算机图形学 实验一 十二面体线框模型
  11. java null 在前_java中判断对象为null时,null在前面还是后面
  12. 概率统计21——指数分布和无记忆性
  13. BigDecimal的除法
  14. python—简单的数据抓取一(简单的文字数据抓取(认识cookie)、简单的图片抓取)
  15. 微信公众号图文 点击显示图片效果
  16. Realm JavaScript
  17. win10更新后闪屏处理方法
  18. Python画水平和垂直线
  19. 数值分析——两点三次Hermite插值
  20. 使用正则表达式处理金额

热门文章

  1. 2022-10-07 数据结构和算法概述 --韩顺平
  2. photoshop怎么扣电子签名/抠图
  3. 使用阿里云创建测试子账号
  4. 前端提效 Magic,导出多个Excel文件并打包为压缩包下载
  5. 统计图表有哪几个种类及其特点
  6. Visio二次开发Java-画图画线(java+com4j)
  7. 使用Azure认知服务快速搭建一个目标检测平台
  8. (C语言) 给出年,月,日,计算该日是该年的第几天
  9. 最新小白设置sublime默认浏览器以及快捷键
  10. 对人再善良,也别犯这3种说话大忌,好心办坏事,嘴欠伤自己