`
吃饱了就饿
  • 浏览: 68819 次
  • 性别: 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]; 

}

 

分享到:
评论

相关推荐

    3D Annotation

    在ArcMap中,你需要将包含需要注解的图层(如“乡名”)添加到地图文档,并在“Layer Properties”的“Labels”选项卡下启用Label features in this layer。接着,在Text String部分选择Label Field,这可以是图层中...

    素材可编辑世界地图中国地图省份地图PPT学习教案.pptx

    * 地图的annotation:了解地图的注释和标签的含义。 地图的应用 地图的应用非常广泛,包括: * 地理信息系统(GIS):使用地图来存储、分析和显示地理信息。 * 城市规划:使用地图来规划和设计城市的发展。 * ...

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

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

    iOS地图自定义大头针

    综上所述,自定义iOS地图大头针涉及的主要步骤包括创建自定义的MKAnnotation子类、在地图上添加注解、以及在`viewFor annotation:` delegate方法中返回自定义的MKAnnotationView。通过这种方式,开发者可以打造具有...

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

    Map Callouts是地图上用于提供更多信息的扩展元素,如标注(Annotation)的详细信息或额外的操作按钮。本文将深入探讨如何在iOS应用中实现自定义地图标签、注解,并添加按钮动作来控制地图标注的行为。 首先,我们...

    arcgis地图文字标注

    文本注释和牵引线可以增加地图的信息量,帮助地图的用户更好地理解地图内容。 ArcGIS还提供了批量标注(动态)和转换地图注记组的功能。批量标注允许用户一次性对多个要素进行标注,而转换地图注记组则可以将标注...

    IOS开发之——MapKit地图

    本文将深入探讨MapKit地图的相关知识点,结合提供的资源——"grgcombs-MultiRowCalloutAnnotationView-76927b9",我们将探讨自定义Callout Annotation View和多行注解视图的实现。 首先,MapKit的基础使用包括设置...

    osgEarth_Annotation-master.zip_Osg sample_osg_osgearth

    - 如何将注解与地图层(如地形、影像)进行交互。 - 注解的更新和动态改变,如根据用户交互或程序逻辑改变注解位置和内容。 此外,了解这些示例还可以帮助开发者学习如何使用osgEarth的其他特性,如光照、材质、...

    04 在百度地图上定位到当前位置,并用大头针进行标注

    然后,将这个自定义的注解添加到地图上。 至此,你已经成功实现了在百度地图上显示当前位置并添加大头针的功能。用户在使用你的应用时,将看到一个随着他们移动而更新的大头针标记。在实际开发中,你可能还需要处理...

    ArcGIS地图矢量化教程

    - 注记(Annotation):静态文本,可用于标注特定信息或注释。 #### 六、地图输出 - **布局设计**:包括设置比例尺、图框、图例等地图元素。 - **地图输出**: - 固定比例尺:确定地图的比例尺大小。 - 设置...

    IOS 地图开发完整参考代码

    在iOS应用开发中,地图功能是许多应用不可或缺的一部分。苹果为开发者提供了强大的地图服务框架——...在提供的“ios地图开发参考代码”压缩包中,应该包含了更详细的示例和注释,帮助你进一步理解和实践这些知识点。

    osgearth-3.1

    以及对象层,允许用户添加自定义的3D模型和注解。 3. **地形渲染**: osgEarth 3.1改进了地形渲染效率,支持多分辨率地形数据,如USGSDEM、SRTM等,能够实现平滑的地形过渡和高效的LOD(Level of Detail)管理。 ...

    path_annotation_tool_lyft_gt

    本文将深入探讨Lyft数据集中的路径注释工具——"path_annotation_tool_lyft_gt",并结合Jupyter Notebook这一强大的交互式编程环境,揭示其在自动驾驶算法开发中的应用与价值。 首先,让我们了解什么是"Lyft数据集...

    支持在地图自定义标记气泡效果

    标题提到的“支持在地图自定义标记气泡效果”是指开发者能够自定义地图上的标注(Annotation)并为其设计独特的气泡(Callout)展示方式,增强用户体验。这个功能允许开发者在苹果地图或者第三方地图库如MapKit中,...

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

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

    MapBox-master_mapbox_

    6. **自定义标记和注解**:MapBox提供了丰富的标记(Marker)和注解(Annotation)功能,允许在地图上添加个性化图标、文字或者形状。 7. **数据加载**:MapBox可以加载GeoJSON、TopoJSON等多种格式的数据,用于...

    MultiRowCalloutAnnotationView.zip

    在iOS开发中,地图功能是常见的需求之一,尤其在导航、位置分享等场景中,用户界面中的地图标注(Annotation)扮演着至关重要的角色。MultiRowCalloutAnnotationView是苹果地图SDK的一个扩展,它为地图标注提供了更...

    AdvancedAnnotationAnimation:快速而肮脏的 MapKit 动画注释测试

    本项目“AdvancedAnnotationAnimation”专注于MapKit中的高级注释动画,这是一次快速而直观的测试,展示了如何利用Objective-C编程语言实现动态、交互式的地图注解效果。 在MapKit中,注解(Annotation)用于在地图...

    自定义地图标签添加按钮动作

    总的来说,这个源码实例是一个很好的学习资源,它涵盖了自定义地图注解和交互式地图元素的实现,对于想要提升地图应用功能的iOS开发者来说非常有价值。通过研究这个示例,你可以深入理解MapKit框架,并掌握如何在...

    模仿拉手团购

    最后,"添加Anntion按钮"可能是指在地图上添加注解(Annotation)的功能。在MapKit中,可以创建MKAnnotation对象来表示地图上的特定点,通常会有一个小图标和弹出的Callout视图,显示详细信息,如商家名称、地址或...

Global site tag (gtag.js) - Google Analytics