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 ...
随机推荐
- 多个Activity之间的切换与数据交互
总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...
- IOS开发环境更换后重新制作Provisioning Profile证书详解
新换了台Macbook,又折腾了一遍Provisioning Profile证书,苹果的证书繁锁复杂,每次制作都相当麻烦,而且Provisioning Profile证书是与设备绑定的,所以更换开发环 ...
- Objective-C内存管理教程和原理剖析(三)
初学Objective-C的朋友都有一个困惑,总觉得对Objective-C的内存管理机制琢磨不透,程 序经常内存泄漏或莫名其妙的崩溃.我在这里总结了自己对Objective-C内存管理机制的研究成果 ...
- Tomcat配置一个ip绑定多个域名
在网上找了半天也没找到相关的资料,都说的太含糊. 本人对tomcat下配置 一ip对多域名的方法具体例如以下,按以下配置一定能成功,经过測试了. <Host name="localho ...
- JavaScript值延迟脚本和异步脚本
Html 4.0为<script>标签定义了defer属性,这个属性的用途是表名脚本在执行时,不会影响页面的构造.也就是说,脚本会延迟到整个页面解析完毕之后在运行,因此,在<scri ...
- matlab最小二乘法数据拟合函数详解
定义: 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可 以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小. ...
- WPF:向客户端发出某一属性值已更改的通知INotifyPropertyChanged接口
Person.cs using System.ComponentModel; namespace _01_INotifyPropertyChanged { class Person:INotifyPr ...
- Tomcat与Web服务器、应用服务器的关系
Tomcat服务器是一个免费的开放源代码的Web应用服务器.因为Tomcat技术先进.性能稳定且免费,所以深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器. A ...
- 解决Thinkpad E450 外接显示器后没有声音的问题
昨天把公司配的ThinkPad E450 带回来了,今天用的时候一切正常没什么问题. 因为要看边看视频边做点别的,我就外接一台显示器,说出来我的这台显示器,你们绝对想不到是什么 显示器.我的这台显示器 ...
- [js - 算法可视化] 汉诺塔(Hanoi)演示程序
前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...