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. QT 声明全局变量

    声明 qdatabasemanager.h #include"qdatabasemanager.h" externQDatabaseManager*Database; 引用 mai ...

  2. Linux用户及用户组管理

    Linux是个优秀的多用户多任务操作系统. 掌握Linux的用户/用户组管理是基本及必备技能之一. 简单做下总结. 无论采用图形界面的用户管理设置,还是终端的管理方式,最终目的都是对系统的用户/用户组 ...

  3. GridView边线Border设置

    1.黑色实线:(行列都有) <asp:GridViewID="GridView1"runat="server"CellPadding="3&qu ...

  4. NOPI导出Excel

    NOPI导出Excel /// <summary> /// 导出的方法 Excel样式 /// </summary> /// <param name="ds&q ...

  5. Codility 1: equilibrium

    提交了格灵深瞳的简历后,收到需要先进行一个简单的技术测试的通知,临时抱佛脚,先刷刷上面几道题: 题目要求 A zero-indexed array A consisting of N integers ...

  6. C++学习之函数指针

     C++学习之函数指针          和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...

  7. RedisTemplate.htm

    http://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTe ...

  8. rsyslog 直接读取日志,当日志截断后,不会继续发送

    rsyslog web机器上日志被截断,那么就不会发送到rsyslog服务器 因为imfile记录了offset,然后你直接>导致offset还没到

  9. 航道水下地形DEM构建方法比较

    论文<航道水下数字高程模型的构建方法> 对航道水下地形建立DEM,技术路线:先构建TIN,手动去除多余三角边,再利用CAD ObjectARX二次开发接口中提供的几种内插方法生成grid ...

  10. 贪吃蛇AI

    贪吃蛇AI 作者:CodeNoob 转载请标明作者和出处 序言 前几天在网上看到一张让人涨姿势的图片,这张图片我很早以前看过,当时就觉得肯定是程序实现的,只是当时还比较渣,不会算法.这次学了java也 ...