`
吃饱了就饿
  • 浏览: 67012 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

地图注解Annotation

    博客分类:
  • IOS
阅读更多
iphone开发小笔记:iphone开发-地图注解(地图上的大头针)

 

Cocoa Touch 没有提供地图注解类,只定义了一个 MKAnnotation 协议。要创建地图注解,必须设计符合 MKAnnotation 协议的类,该类需要一个 CLLocationCoordinate2D coordinate 属性,以及 title 和 subtitle 实例方法,

 

一. 设计注解类:

例,注解(大头针)类:

.h

#import <MapKit/MapKit.h>

 

@interface LocationObject : NSObject <MKAnnotation> {

CLLocationCoordinate2D coordinate;

NSString *_titleString; //title值

NSString *_subTitleString;

float _latitude; // 经度值

float _longitude; //纬度值

}

 

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@property float _latitude; // 经度值

@property float _longitude; //纬度值

@property (nonatomic, copy) NSString *_titleString; //title值

@property (nonatomic, copy) NSString *_subTitleString;

 

- (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude;

 

@end

---------------------

.m

@implementation LocationObject

@synthesize coordinate,_latitude,_longitude,_titleString,_subTitleString;

 

- (id) initWithTitle:(NSString *)atitle latitue:(float)alatitude longitude:(float)alongitude

{

if(self=[super init])

{

self._titleString = atitle;

self._latitude = alatitude;

self._longitude = alongitude;

}

return self;

}

 

- (CLLocationCoordinate2D)coordinate;

{

    CLLocationCoordinate2D currentCoordinate;

currentCoordinate.latitude = self._latitude ;

    currentCoordinate.longitude = self._longitude;

    return currentCoordinate; 

}

 

// required if you set the MKPinAnnotationView's "canShowCallout" property to YES

- (NSString *)title

{

return self._titleString;

}

// optional

- (NSString *)subtitle

{

    return _subTitleString;

}

 

- (void)dealloc

{

[_titleString release];

[_subTitleString release];

    [super dealloc];

}

 

@end

 

二、创建、添加和删除注解

1、创建注解:

LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:nameString latitue:[latitudeString floatValue] longitude:[longitudeString floatValue]];

aLocationObject._subTitleString = addressString;

 

2、添加注解:

先构建一个注解数组 NSMutableArray *_mapAnnotations;

然后 

[self._mapAnnotations addObject:aLocationObject];

[self._mapView addAnnotations:self._mapAnnotations];

 

3、删除注解:

删除注解可执行 removeAnnotation:一次只删除一个注解,或者执行 removeAnnotation:删除一个数组中的所有项。

如果需要使地图视图回到无注解状态,可执行:

[self._mapView removeAnnotations:self._mapView.annotations];

删除其中全部注解,MKMapView 的 annotations 属性获取了所有注解的数组,然后从地图上全部删除。

 

三、注解视图 

注解对象并非视图,是描述注解的抽象类。注解视图是属于 MKAnnotationView 的子类 MKPinAnnotationView,当地图通过 addAnnotation:或 addAnnotations:添加了注解后,MKMapViewDelegate 协议的委托方法 - (void)mapView:(MKMapView *)mapViewdidAddAnnotationViews:(NSArray *)views 就会通知委托,可以在此回调方法里设置注解视图,如设置大头针颜色、添加附属按钮等,例:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views

{

// Initialize each view

for (MKPinAnnotationView *mkaview in views)

{

// 当前位置 的大头针设为紫色,并且没有右边的附属按钮

if ([mkaview.annotation.title isEqualToString:@"当前位置"]) 

{

mkaview.pinColor = MKPinAnnotationColorPurple;

mkaview.rightCalloutAccessoryView = nil;

continue;

}

 

// 其他位置的大头针设为红色,右边添加附属按钮

mkaview.pinColor = MKPinAnnotationColorRed;

UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

mkaview.rightCalloutAccessoryView = button;

}

}

 

四、注解视图 MKPinAnnotationView 的几个属性说明

 

newAnnotation.animatesDrop = YES;  // 大头针掉落的动画开启,NO-关闭

 

newAnnotation.canShowCallout=YES;  // 控制轻击按钮是否生成一个注解视图,默认为Yes-开启

 

newAnnotation.pinColor    // 设置大头针颜色,一共有三种颜色:红色(MKPinAnnotationColorRed),绿色(MKPinAnnotationColorGreen),紫色(MKPinAnnotationColorPurple)

 

 

五、自动显示注解视图(Callout)

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

{

。。。。。。

///// 自动显示 Callout

_myAnnotation = annotation;

[self performSelector:@selector(showCallout) withObject:selfafterDelay:0.1];

 

  return newAnnotation;

}

 

- (void)showCallout {

    [self._mapView selectAnnotation:_myAnnotation animated:YES]; 

}

 

分享到:
评论

相关推荐

    chartjs-plugin-annotation:Chart.js的注释插件

    注释不适用于没有完全两个轴的任何图表,包括饼图,雷达图和极地图。 待办事项 仍然需要完成以下功能: 框注解标签 文字注解 文献资料 您可以在找到chartjs-plugin-annotation的文档。 贡献 在向项目提交问题或...

    (0010)-iOS/iPhone/iPAD/iPod源代码-地图(Map)-Map Callouts

    自定义地图标签、注解,以及给地图标注添加按钮动作,控制地图标注出现的动作(是否需要降落效果)。 注意:请在Mac下解压使用

    harmonyos2-CellAnnotationTutorial:本教程的随附代码:使用自动和手动方法注释单细胞转录组图

    实际上,每个单细胞地图注释情况都会有所不同,并且可能不需要使用所有这些工具。 就本教程而言,这些工具利用公开可用的数据,涵盖基于参考和标记的自动注释、手动注释以及如何构建一致的集群注释集。 R Notebook ...

    Timap:用于 MapView 自定义注释的 Titanium android 模块

    地图 用于 MapView 自定义注释的 Titanium android 模块。 通过资源 xml 文件完全可定制的注释。 还没有完成 ****去做 1.Clustering 2.Annotation Selector 3.Using image from JavaScript in annotation 联系我...

    Mapx4+vb 6.0实现功能全面的例子

    增加、修改、删除文本类型和符号类型的注释(annotation) &lt;br&gt;3.创建点、线、折线、面和文本对象 &lt;br&gt;4.图元的编辑,移动,修改,删除以及点、线、面、文本图元样式的修改 &lt;br&gt;5.地图选择,点选、圆选、...

    mapinfo mapx5.0开发指南下

    注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 MapX 中的可创建对象. . . . . . . . . . . . . . ....

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    JAVA上百实例源码以及开源项目源代码

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

    java开源包1

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包11

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包2

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包3

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包6

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包5

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包10

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包4

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包8

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包7

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

    java开源包9

    Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava...

Global site tag (gtag.js) - Google Analytics