iOS开发那些事-iOS6苹果地图有用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化。开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法。因此本节介绍的内容也相同适用于iOS5上执行地图应用开发。
iOS应用程序中使用Map Kit API开发地图应用程序。 其核心是MKMapView类使用。我们能够设置地图显示方式、控制地图,能够在地图上加入标注。
显示地图
在Map Kit API中显示地图的视图是MKMapView,它的托付协议是MKMapViewDelegate。Map Kit API使用须要导入MapKit框架。
以下我们通过一个案例介绍一以下我们介绍一下Map Kit API的使用。这个案例在“输入查询地点keyword”文本框中输入keyword,点击“查询”button,先进行地理信息编码查询,查询获得地标信息后,在地图上标注出来。

首先加入框架MapKit.framework。然后在project中打开MainStoryboard.storyboard的IB设计,从对象库中拖拽Map View到设计画面中。

调整它的位置和大小使得Map View尽可能填出画面以下的空白部分,然后为Map View定义输入出口。以下我们看看主视图控制器ViewController.h代码:
#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import ”MapLocation.h” @interface ViewController : UIViewController <MKMapViewDelegate> @property (weak, nonatomic) IBOutlet UITextField *txtQueryKey; @property (weak, nonatomic) IBOutlet MKMapView *mapView; - (IBAction)geocodeQuery:(id)sender; @end
因为使用Map Kit API,须要引入头文件<MapKit/MapKit.h>,头文件”MapLocation.h”是我们自定义的描写叙述地图标注点类。在定义ViewController时,还须要声明实现MKMapViewDelegate协议。txtQueryKey属性是查询keyword文本框,mapView属性是MKMapView类型,它与画面相应。点击查询button触发geocodeQuery:方法,它处理查询并在地图上做标注。
以下我看看ViewController.m的viewDidLoad方法代码:
- (void)viewDidLoad
{
[super viewDidLoad];
_mapView.mapType = MKMapTypeStandard;
_mapView.delegate = self;
}
在viewDidLoad方法中设置地图的类型,它的类型有3种:
MKMapTypeStandard 标注地图类型。
MKMapTypeSatellite 卫星地图类型。在卫星地图中没有街道名称等信息;
MKMapTypeHybrid 混合地图类型。在混合地图是在卫星地图上标注出街道等信息;

viewDidLoad方法的_mapView.delegate = self语句是当前视图控制器赋值给地图视图的delegate属性,这样地图视图在须要的时候就会回调ViewController,假设失败,回调以下的失败方法:
- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {
NSLog(@”error : %@”,[error description]);
}
跟踪用户位置变化
MapKit提供了跟踪用户位置和方向变化的API,我们不用自己编写定位服务代码。开启地图视图的showsUserLocation属性,并设置方法setUserTrackingMode:就能够了,代码例如以下:
- (void)viewDidLoad
{
[super viewDidLoad];
if ([CLLocationManager locationServicesEnabled])
{
_mapView.mapType = MKMapTypeStandard;
_mapView.delegate = self;
_mapView.showsUserLocation = YES;
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
}
当中代码_mapView.showsUserLocation = YES,同意跟踪显示用户位置信息。在iOS设备中显示用户位置方式是一个发亮的蓝色小圆点。

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]语句设置用户跟踪模式,用户跟踪模式有3种:
MKUserTrackingModeNone 。没实用户跟踪模式;
MKUserTrackingModeFollow 。能够跟踪用户的位置变化;
MKUserTrackingModeFollowWithHeading 。能够跟踪用户的位置和方向变化;
然后,我们还须要实现地图视图托付方法mapView:didUpdateUserLocation:,它的代码例如以下:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
_mapView.centerCoordinate = userLocation.location.coordinate;
}
该托付方法在定位服务更新完毕用户位置时候回调该方法,我们在该方法中又一次调整地图的中心点为当前用户的中心点,当中_mapView.centerCoordinate = userLocation.location.coordinate语句就是实现该目的。
这几行代码就能够跟踪用户位置的变化了,可是为了这样一个小的案例拿着iPhone在外面跑一圈进行測试没有必要。能够使用模拟器測试,模拟器有几个固定的模式能够发出连续变化的数据。測试执行在画面中会有一个小圆圈,它依照我们设定的速度一直执行。

iOS开发那些事-iOS6苹果地图有用开发的更多相关文章
- iOS开发那些事-iOS6苹果地图实用开发
在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...
- IOS 使用IOS6苹果地图
IOS应用程序中使用Map Kit API开发地图应用程序.其核心是MKMapView类的使用.我们可以设置地图显示方式,控制地图,可以在地图上添加标注. 1.显示地图 在Map Kit API中显示 ...
- 【读书笔记】iOS-定位服务与地图应用开发
一,定位服务. iOS设备能提供3种不同的定位途径: 1,WiFi定位,通过查询一个WiFi路由器的地理位置的信息,比较省电:iPhone,Ipod touch 和iPad都可以. 2,蜂窝式移动电话 ...
- ios开发之--条用第三方地图路线导航
项目里面有位置功能,需要有导航,导航两种实现方式 (集成第三方SDK.URL跳转第三方应用) ,直接集成就不说,下面来说下通过url跳转, 最终效果如如下: 如果手机上安装的有客户端就展示,没有就不展 ...
- iOS 证书那些事
关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾.对于一个iOS开发小白.半吊 ...
- 每位iOS开发者不容错过的10大有用工具
内容简单介绍 1.iOS简单介绍 2.iOS开发十大有用工具之开发环境 3.iOS开发十大有用工具之图标设计 4.iOS开发十大有用工具之原型设计 5.iOS开发十大有用工具之演示工具 6.iOS开发 ...
- Web程序员开发App系列 - 申请苹果开发者账号
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- 极速创建 IOS APP !涛舅舅苹果 IOS APP自助生成系统!不用证书、不用越狱、永久可用
不用签名将网页封装成苹果APP,无需苹果企业签名,IPA签名,ios签名,免越狱安装 (本方法只支持网站封装app,原生的用不了,详细请咨询客服) 近期很多朋友问我把网站变成app的方法,原因很多种, ...
- 2017-04-26 ios ipv6那些事(已完美解决)
2017-04-26 ios ipv6那些事(已完美解决) 工作单位性质属于外包公司,每天都有几十的app要提交上传至应用市场,于2017年3月份接到ios工程师反馈 Guideline 2.1 ...
随机推荐
- SPOJ DISUBSTR(后缀数组)
传送门:DISUBSTR 题意:给定一个字符串,求不相同的子串. 分析:对于每个sa[i]贡献n-a[i]个后缀,然后减去a[i]与a[i-1]的公共前缀height[i],则每个a[i]贡献n-sa ...
- 【剑指offer】q34:丑数
题目要求第n个丑数.所以对于中间结果不须要保存. def Humble(index): curHum = 1 M2 = 2; M3 = 3; M5 = 5 while index > 1: cu ...
- 经常使用Firefox插件大全
Web开发者经常使用的火狐插件 1)FireShot:是一个截图工具,来源于截图软件Screenshot Studio的开发商,是一个Firefox扩展或者说是Firefox版的Screenshot ...
- cocos2d 走动椭圆
1.效果图 艺术与规划说他想与我合作在全国率先主角光环加,椭圆形走动. cocos2d自带没有,參考网上的写了一个. 2.椭圆数学知识 有关椭圆的数学知识我已经忘光了.网上找了点资料: a是椭圆的长半 ...
- 用cocos2d-x 3.2 实现的FlappyBird
近期才開始学cocos2dx,买了几本书还有看大神(主要是 笨木头)的博客.然后就自己尝试用cocos2d-x实现了一下... (新手,勿喷...) 先看执行效果 http://pan.baidu.c ...
- hdu 5015 233 Matrix(构造矩阵)
http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...
- 每天进步一点点——Linux磁盘管理LVM与RAID
转载请注明出处:http://blog.csdn.net/cywosp/article/details/38965799 1. 传统磁盘管理问题 当分区大小不够用时无法扩展其大小,仅仅能通过加入硬盘. ...
- 关于AIX VG中 LV 的状态问题,LV STATE
在数据库管理过程中常常遇见LV状态异常,而造成LV不能再次被使用的情况,那么AIX中LV的两种状态分别代表什么呢 如果是访问fs需要open,即创建文件系统并mount 文件系统LV STATE 才是 ...
- 为什么推荐std::string而不是char*
例如如下: map<const char*, const char*> map_test; map_test["a"] = "a"; map_tes ...
- Apache的Mesos和Google的Kubernetes 有什么区别?
Apache的Mesos和Google的Kubernetes 有什么区别?本文来自StackOverFlow上的一个问题,主要讨论Mesos和Kubernetes的区别,相信我们很多人也有同意的疑问. ...