如何使用地图的注解功能

如何使用地图的注解功能

实现了协议MKAnnotation的对象才能够被用地图上的注解对象,一般都是如下定义的.

DisplayMap.h + DisplayMap.m


//
// DisplayMap.h
// MoreMapInfo
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface DisplayMap : NSObject <MKAnnotation>

@property (nonatomic, copy, readonly) NSString *title;
@property (nonatomic, copy, readonly) NSString *subtitle;
@property (nonatomic, assign, readonly) CLLocationCoordinate2D coordinate;

- (id)initWithTitle:(NSString*)title
SubTitle:(NSString*)subtitle
Coordinate:(CLLocationCoordinate2D)coordinate;

@end


//
// DisplayMap.m
// MoreMapInfo
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "DisplayMap.h"

@implementation DisplayMap

- (id)initWithTitle:(NSString*)title
SubTitle:(NSString*)subtitle
Coordinate:(CLLocationCoordinate2D)coordinate
{
if (self = [super init])
{
_title = title;
_subtitle = subtitle;
_coordinate = coordinate;
}

return self;
}

@end

RootViewController.m


//
// RootViewController.m
// MoreMapInfo
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import <MapKit/MapKit.h>
#import "DisplayMap.h"
#import "LocationCoder.h"
#import "YXLocationManager.h"

@interface RootViewController ()<CLLocationManagerDelegate, MKMapViewDelegate>

@property (nonatomic, strong) MKMapView *mapView;

@end

@implementation RootViewController

- (void)viewDidLoad
{
[super viewDidLoad];

[YXLocationManager getCurrentLocation:^(CLLocation *location, NSError *error) {
if (error == nil)
{
// 将经纬度解析为地址
LocationCoder *lCoder = [[LocationCoder alloc] initWithLocation:location];
[lCoder startAnalyseLocation];
lCoder.resultBlock = ^(NSArray *placemarks, NSError *error,
LocationCoder *locationCoder)
{
NSLog(@"%@", locationCoder.addressLines);
};

//地图
_mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];
_mapView.delegate = self;
_mapView.showsUserLocation = YES;
_mapView.mapType = MKMapTypeHybrid;
_mapView.region = MKCoordinateRegionMake(location.coordinate,
MKCoordinateSpanMake(0.1, 0.1));

//加入大头针
DisplayMap *anno = [[DisplayMap alloc]initWithTitle:@"title"
SubTitle:@"subtitle"
Coordinate:CLLocationCoordinate2DMake(39.928168, 116.39328)];
[_mapView addAnnotation:anno];
[self.view addSubview:_mapView];

//给地图添加长按手势,插上大头针
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self
action:@selector(longPress:)];
[_mapView addGestureRecognizer:longPress];
}
else
{
NSLog(@"%@", error);
}
}];
}

#pragma mark - viewDidLoad UILongPressGestureRecognize longPress:
- (void)longPress:(UILongPressGestureRecognizer*)longPress
{
//长按一次 只在开始插入一次大头针 否则能用大头针写字。。。
if (longPress.state == UIGestureRecognizerStateBegan)
{
CGPoint point = [longPress locationInView:_mapView];
CLLocationCoordinate2D coordinate = [_mapView convertPoint:point
toCoordinateFromView:_mapView];

DisplayMap* an = [[DisplayMap alloc] initWithTitle:@"title"
SubTitle:@"subtitle"
Coordinate:coordinate];
[_mapView addAnnotation:an];

[_mapView setCenterCoordinate:coordinate
animated:YES];
}
}

#pragma mark - MKMapViewDelegate
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
//如果是所在地,跳过(固定写法)
if ([annotation isKindOfClass:[mapView.userLocation class]])
{
return nil;
}

// 重用
MKPinAnnotationView* pinView = (MKPinAnnotationView*) [mapView dequeueReusableAnnotationViewWithIdentifier:@"ID"];
if (pinView == nil)
{
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"ID"];
}

//能显示Call信息上面那些图字(很重要哦)
pinView.canShowCallout = YES;

//只有三种
pinView.pinColor = MKPinAnnotationColorPurple;

//显示动画 - 从天上落下
pinView.animatesDrop = YES;

pinView.image = [UIImage imageNamed:@"地图标点"];

// 左侧CalloutAccessoryView(使用了自定义view)
UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
view.backgroundColor = [UIColor redColor];
pinView.leftCalloutAccessoryView = view;

// 右侧CalloutAccessoryView(使用了系统的按钮)
UIButton* button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = button;

return pinView;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(@"点击事件");
}

@end

打印信息:

2014-05-26 10:24:46.005 MoreMapInfo[6138:60b] AKLocation - [Line 118]

 Started locating
 ==============
 Distance
filter accuracy: -1.00
 Desired accuracy: 100.00
 Timeout:
10.00
May 26 10:24:47 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:47.331
MoreMapInfo[6138:9c07] vImage decode failed, falling back to CG
path.
May 26 10:24:47 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:47.372
MoreMapInfo[6138:8f0b] vImage decode failed, falling back to CG
path.
2014-05-26 10:24:47.462 MoreMapInfo[6138:60b] 中国北京市东城区东四街道东四朝阳门北小街2-1号
May
26 10:24:48 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.363
MoreMapInfo[6138:a803] vImage decode failed, falling back to CG
path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.375
MoreMapInfo[6138:a603] vImage decode failed, falling back to CG
path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
2014-05-26 10:24:48.402
MoreMapInfo[6138:9607] vImage decode failed, falling back to CG
path.
May 26 10:24:48 Phoenix MoreMapInfo[6138] <Error>:
CGBitmapContextCreate: unsupported parameter combination: 5 integer
bits/component; 16 bits/pixel; 3-component color space;
kCGImageAlphaNoneSkipLast; 512 bytes/row.
May 26 10:24:48 Phoenix
MoreMapInfo[6138] <Error>: CGBitmapContextCreate: unsupported
parameter combination: 5 integer bits/component; 16 bits/pixel;
3-component color space; kCGImageAlphaNoneSkipLast; 512
bytes/row.
2014-05-26 10:24:48.420 MoreMapInfo[6138:910b] vImage decode
failed, falling back to CG path.
2014-05-26 10:24:48.421
MoreMapInfo[6138:9e07] vImage decode failed, falling back to CG
path.
2014-05-26 10:25:10.317 MoreMapInfo[6138:60b] 点击事件

要点:

// 能显示Call信息上面那些图字(很重要哦)
pinView.canShowCallout = YES

如何使用地图的注解功能,布布扣,bubuko.com

时间: 05-25

如何使用地图的注解功能的相关文章

springmvc注解功能

写程序,大多的配置让人很头痛.有了注解功能,写起来就方便了许多. 在上个springmvc中 control换成 package com.conntrol; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public cl

iOS 地图和定位功能

1:定位使用的生活场景 在移动互联网时代,移动app能解决用户的很多生活琐事,比如导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 在上述应用中,都用到了地图和定位功能 2:iOS定位依赖的框架 在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发 Map Kit :用于地图展示(比较重量级) Core Location :用于地理定位 Map Kit的定位是基于Core Location的 iOS定位热门术语: LBS :Location Based Service So

地图音乐多元功能 LG推智能手表

韩国大厂LG,也要进军穿戴式装置,下周LG要公布G3新机,可能同步推出智慧手表LG Watch,主打防水的金属机身,能随时收发E-mail,另外三星也打算推出S5的新版本,叫做S5 Active,用更大屏幕和防摔功能,抢攻竞争激烈的手机市场. 简约的黑色外型,加上全金属外壳,LG即将推出的智能手表,标榜机身可以防水,功能也很多元,地图信息随时随地显示在表面上,不管是要听音乐.寄E-mail,或是纪录行事历,手表都能帮你完成. 试用影片:「LG Watch搭载Android,谷歌最新的穿戴式系统.

使用ehcache-spring-annotations开启ehcache的注解功能

Spring 3.0.5的,更细颗粒化的缓存设置,更方便的注解,可以具体到把每个方式的返回值做缓存, 需要 ehcache-spring-annotations-1.1.x. 下载地址是:http://code.google.com/p/ehcache-spring-annotations 首先,applicationContext.xml  Xml代码   <beans xmlns="http://www.springframework.org/schema/beans" xm

Highcharts图表的注解功能

Highcharts图表的注解功能 在图表中,往往须要对图表总体或者部分元素进行对应注解.帮助浏览者阅读图表.尽管标签组labels能够实现类似的功能.可是其功能相对简单.要实现复杂的注解功能,用户能够借助第三方插件Annotations实现. 图表注解 加入的注解.能够有多种形式的边框,而且能够设置拖动功能.图标浏览者还能够通过注解工具栏手动加入注解. PS:具体教程已经加入到<网页图表Highcharts实践教程基础篇>v1.2.3中.

站点地图静态生成功能

原来的站点地图,因为启用了伪静态,所以直接伪静态指向生成站点地图的PHP文件,HTML地图无所谓,是正常的,而XML地图,则一直不能显示.从代码里查看,是正常的,后来用http状态查询发现,xml的返回状态是 Content-Type: text/xml 而启用伪静态的sitemap.xml返回的状态还是根html的代码返回状态是一样的 Content-Type: text/html; charset=utf-8 尝试了很多办法解决,发现用PHP返回header值也还是不行,必须静态生成,需要在

Android学习之高德地图的通用功能开发步骤(二)

周一又来了,我就接着上次的开发步骤(一)来吧,继续把高德地图的相关简单功能分享一下 上次写到了第六步,接着写第七步吧. 第七步:定位 + 地图选点 + 路径规划 + 实时导航 以下是我的这个功能NaviMapActivity的页面布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com

【高德LBS开源组件大赛】iOS版地图选中Overlay功能组件

开源组件名称 iOS版地图选中Overlay功能组件? 开源组件说明及使用场景 提供在iOS版地图中选中Overlay功能.使用场景很广泛,举个例子,搜索从A点到B点的公交路线时,地图上提供多条路线以供选择,这时候就需要提供选中Overlay的功能以便进行交互. 开源组件所使用的技术 本工程为基于高德地图iOS 3D SDK进行封装,实现了地图中选中Overlay的功能的例子 Git代码托管地址 http://git.oschina.net/cysrc/ClickOverlay 开源组件截图以及

Struts2的注解功能

我们知道通常情况下,Struts2是通过struts.xml配置的.但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<include>节点将不同的配置文件引入到最终的struts.xml文件中,但是毕竟还是要维护和管理这些文件,因此也会给维护工作带来很大的困扰.为了解决这个问题,可以考虑使用struts2的注解.实际上struts2中最主要的概念就是package.action以及Interceptor等等概念,所以只要明白