IOS应用程序中使用Map Kit API开发地图应用程序。其核心是MKMapView类的使用。我们可以设置地图显示方式,控制地图,可以在地图上添加标注。

1.显示地图

在Map Kit API中显示地图的师徒是MKMapView,他的委托协议是MKMapViewDelegate。Map Kit API使用需要导入MapKit框架。

下面通过一个实例介绍一下Map Kit API的使用,实例如图所示,再输入查询地点关键字文本框中输入关键字,单击查询,先进行地理信息编码查询,查询获得地标后在地图上标注出来。

首先添加框架MapKit.framework,设置视图,在ViewController.h代码如下:

 #import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "HBMapLocation.h" @interface HBMaPViewController : UIViewController<MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
- (IBAction)gecodeQuery:(id)sender;
- (IBAction)getMyPlace:(id)sender; @property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate;
@end

其中头文件中的“HBMapLocation.h”是我们定义的描述地图标注点类,稍后再说。在ViewController.m中代码如下:

 - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.mapView.mapType = MKMapTypeStandard;
self.mapView.delegate = self;
self.mapView.showsUserLocation = YES;
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}

其中viewDidLoad方法中设置地图的类型,他的类型有3种:

(1)MKMapTypeStandard标注地图类型

(2)MKMapTypeSatellite 卫星地图类型

(3)MKMapTypeHybrid混合地图类型。

2.添加标注

如果要实现在地图视图上添加标注点,需要两个步骤:第一步时触发添加动作;第二步是实现地图委托方法mapView:viewForAnnotation:完成添加标注。

2.1 触发添加动作

通过查询按钮触发添加标注代码如下:

 - (IBAction)gecodeQuery:(id)sender {

     if(_txtQueryKey.text == nil || [_txtQueryKey.text length] == )
{
return;
} CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder geocodeAddressString:_txtQueryKey.text completionHandler:^(NSArray *placemarks, NSError *error) {
int i=[placemarks count];
NSLog(@"查询记录数:%i",i); if([placemarks count]>)
{
[_mapView removeAnnotations:_mapView.annotations];
} for (int i=; i<[placemarks count]; i++) {
CLPlacemark *placemark = placemarks[i]; //关闭键盘
[self.txtQueryKey resignFirstResponder]; //调整地图位置和缩放比例
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, , );
[_mapView setRegion:viewRegion animated:YES]; HBMapLocation *annotation = [[HBMapLocation alloc]init];
annotation.streetAddress=placemark.thoroughfare;
annotation.city=placemark.locality;
annotation.state=placemark.administrativeArea;
annotation.zip=placemark.postalCode;
annotation.coordinate=placemark.location.coordinate; [_mapView addAnnotation:annotation];
}
}]; }

2. 实现地图委托方法mapView:viewForAnnotation: 完成添加标注

 - (IBAction)getMyPlace:(id)sender {
self.mapView.centerCoordinate = self.coordinate;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(self.coordinate, , );
[_mapView setRegion:viewRegion animated:YES]; } -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"]; if(annotationView == nil)
{
annotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"PIN_ANNOTATION"];
} annotationView.pinColor = MKPinAnnotationColorPurple;
annotationView.animatesDrop = YES;
annotationView.canShowCallout = YES; return annotationView;
}

3.跟踪用户位置变化

MapKit 提供个跟踪用户位置和方向变化的API,可以不用自己编写定位服务代码。开启地图的showUserLocation属性,并设置方法setUserTrackingMode:就可以了,其代码写在viewDidLoad中。

然后还需要实现地图视图委托方法mapView:didUpdateUserLocation: 代码如下

 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
self.coordinate=userLocation.location.coordinate;
self.mapView.centerCoordinate = userLocation.location.coordinate;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, , );
[_mapView setRegion:viewRegion animated:YES];
}

其中自定义标注类HBMapLocation.h代码如下

 #import <Foundation/Foundation.h>
#import <MapKit/MapKit.h> @interface HBMapLocation : NSObject<MKAnnotation> //街道信息属性
@property (nonatomic,copy)NSString *streetAddress;
//城市信息属性
@property (nonatomic,copy)NSString *city;
//州,省,市信息
@property (nonatomic,copy)NSString *state;
//邮编
@property (nonatomic,copy)NSString *zip;
//地理坐标
@property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate; @end

HBMapLocation.m代码如下:

 @implementation HBMapLocation

 -(NSString *)title
{
return @"要查找的位置";
} -(NSString *)subtitle
{
NSMutableString *ret = [NSMutableString new];
if(_state)
{
[ret appendString:_state];
}
if(_city)
{
[ret appendString:_city];
}
if(_city && _state)
{
[ret appendString:@", "];
}
if(_streetAddress && (_city || _state || _zip))
{
[ret appendString:@"?"];
}
if(_streetAddress)
{
[ret appendString:_streetAddress];
}
if(_zip)
{
[ret appendFormat:@", %@",_zip];
}
return ret;
} @end

运行如下:

IOS 使用IOS6苹果地图的更多相关文章

  1. iOS开发那些事-iOS6苹果地图实用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...

  2. iOS开发那些事-iOS6苹果地图有用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...

  3. IOS 使用程序外地图(IOS Map and google Map)

    1.调用IOS6苹果地图 IOS6中实现这个功能需要使用Map Kit中的MKPlaceMark和MKMapItem两个类,因此我们需要在工程中添加MapKit.framework主要代码如下: - ...

  4. iOS之定位与地图

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...

  5. iOS开发---集成百度地图完善版

    一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...

  6. 李洪强iOS开发之苹果使用预览截图

    李洪强iOS开发之苹果使用预览截图 01 在预览的图片中选中你要截得区域  02 - command + C   03 - Command + N 04 - Command + S (保存)

  7. IOS定位核心与地图

    IOS定位核心与地图                 Core Location以及Map框架包通常能给我们的应用程序添加定位和地图相关的服务.Core Location框架包通常是使用硬件设备来进行 ...

  8. 李洪强iOS开发之苹果企业开发者账号申请流程

    李洪强iOS开发之苹果企业开发者账号申请流程 一. 开发者账号类型选择 邓白氏码 DUNS number,是Data Universal Numbering System的缩写,是一个独一无二的9位数 ...

  9. IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

    IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...

随机推荐

  1. Error pulling origin: error: The following untracked working tree files would be overwritten by...

    git在pull时,出现这样的错误的时候,可能非常多人进进行stash.相关stash的请看:Error pulling origin: error: Your local changes to th ...

  2. Rabbit and Grass(杭电1849)(尼姆博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. JS实现快排

    /*采用快排的方法排序,取第一个值为轴对数组进行分割排序,不断迭代后实现数组的排序*/ //定义分割函数 function partF(A,low, high){ var temp = A[low]; ...

  4. jboss7.1.1配置数据库mysql与oracle

    环境: joss7.1.1安装成功,路径为:D:\profession\jboss-as-7.1.1.Final mysql-connector-java-5.1.18-bin.jar(mysql 5 ...

  5. 升级python的sqlite库版本

    今天了解了一下用python获取chrome cookie信息,在研究的过程中,发现打开数据库失败,后来调查了一下发现是由于sqlite3库太老的缘故,起码需要3.8以上,然后看了一下python 2 ...

  6. Spring——AOP(面向切面编程)@AspectJ注解方式

    一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...

  7. ListView 条目加载上滑下滑首尾缩放动画实现

    要实现这个效果,只需要再适配器getView之前,给每个条目的view设置相应的动画即可. 首先需要2个动画的xml文件. 在res下新建anim文件夹:(res/anim) 第一个动画xml文件: ...

  8. APM代码学习笔记3:执行过程

    以Linux平台ArduPlane为例 \ArduPlane\Plane.cpp 定义Plane类 继承自AP_HAL::HAL::Callbacks ,获取hal对象. \ArduPlane\Ard ...

  9. Vue.js——webpack

    Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...

  10. Redhat Linux内核升级全记录(转)

        http://www.sina.com.cn 2001/06/15 15:38 中国电脑教育报 李红   Redhat Linux因为比较容易上手,所以用户很多.它系统配置完善,预装了丰富的应 ...