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

首先添加框架MapKit.framework。然后在工程中打开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属性是查询关 键字文本框,mapView属性是MKMapView类型,它与画面对应。点击查询按钮触发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开发小白.半吊 ...
- Web程序员开发App系列 - 申请苹果开发者账号
Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- 极速创建 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 ...
随机推荐
- cdoj 93 King's Sanctuary 傻逼几何题
King's Sanctuary Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sho ...
- Java读取Properties配置文件
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...
- C语言统计一个字符串中单词的个数
假定每一个单词用空格隔开. 样例: 输入:how are you! 输出:3 两种方法: 一: #include <stdio.h> #include <string.h> # ...
- Android游戏框架之基础之AA碰撞系统
AA 碰撞体 就是将所有的物体设置为矩形框进行碰撞计算.下面是代码 /* * Copyright (C) 2010 The Android Open Source Project * * Licens ...
- mysqldump dump-slave
http://blog.itpub.net/29254281/viewspace-1392757/ 查看从库的状态,发现从库的sql_thread进程会自动停止,停止之后 又会自动开启,没有人操作这个 ...
- Spring.NET 与 NHibernate
回到 Spring.NET & NHibernate of C#.NET 技术论坛 实战C#.NET编程----Spring.NET & NHibernate从入门到精通 您可以从以下 ...
- shell导出和导入redis
1.导出redis #!/bin/bash REDIS_HOST=localhost REDIS_PORT=6379 REDIS_DB=1 KEYNAME=redis:hash:* KEYFILE=k ...
- Django添加模型无法数据迁移解决方法
用Django开发一款博客,按照教程一步步写下来,发现当我创建一个模型blogpost的时候,使用数据迁移 python manage.py migrate 提示 Operations to perf ...
- 5. Android框架和工具之 ZXing(二维码)
Android进阶笔记06:Android 实现扫描二维码实现网页登录
- 用javascript获取屏幕高度和宽度等信息
网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWi ...