IOS 使用IOS6苹果地图
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苹果地图的更多相关文章
- iOS开发那些事-iOS6苹果地图实用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...
- iOS开发那些事-iOS6苹果地图有用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...
- IOS 使用程序外地图(IOS Map and google Map)
1.调用IOS6苹果地图 IOS6中实现这个功能需要使用Map Kit中的MKPlaceMark和MKMapItem两个类,因此我们需要在工程中添加MapKit.framework主要代码如下: - ...
- iOS之定位与地图
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...
- iOS开发---集成百度地图完善版
一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...
- 李洪强iOS开发之苹果使用预览截图
李洪强iOS开发之苹果使用预览截图 01 在预览的图片中选中你要截得区域 02 - command + C 03 - Command + N 04 - Command + S (保存)
- IOS定位核心与地图
IOS定位核心与地图 Core Location以及Map框架包通常能给我们的应用程序添加定位和地图相关的服务.Core Location框架包通常是使用硬件设备来进行 ...
- 李洪强iOS开发之苹果企业开发者账号申请流程
李洪强iOS开发之苹果企业开发者账号申请流程 一. 开发者账号类型选择 邓白氏码 DUNS number,是Data Universal Numbering System的缩写,是一个独一无二的9位数 ...
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...
随机推荐
- 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 ...
- Rabbit and Grass(杭电1849)(尼姆博弈)
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- JS实现快排
/*采用快排的方法排序,取第一个值为轴对数组进行分割排序,不断迭代后实现数组的排序*/ //定义分割函数 function partF(A,low, high){ var temp = A[low]; ...
- 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 ...
- 升级python的sqlite库版本
今天了解了一下用python获取chrome cookie信息,在研究的过程中,发现打开数据库失败,后来调查了一下发现是由于sqlite3库太老的缘故,起码需要3.8以上,然后看了一下python 2 ...
- Spring——AOP(面向切面编程)@AspectJ注解方式
一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...
- ListView 条目加载上滑下滑首尾缩放动画实现
要实现这个效果,只需要再适配器getView之前,给每个条目的view设置相应的动画即可. 首先需要2个动画的xml文件. 在res下新建anim文件夹:(res/anim) 第一个动画xml文件: ...
- APM代码学习笔记3:执行过程
以Linux平台ArduPlane为例 \ArduPlane\Plane.cpp 定义Plane类 继承自AP_HAL::HAL::Callbacks ,获取hal对象. \ArduPlane\Ard ...
- Vue.js——webpack
Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...
- Redhat Linux内核升级全记录(转)
http://www.sina.com.cn 2001/06/15 15:38 中国电脑教育报 李红 Redhat Linux因为比较容易上手,所以用户很多.它系统配置完善,预装了丰富的应 ...