在iOS6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化。开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法。因此本节介绍的内容也同样适用于iOS5上运行地图应用开发。
iOS应用程序中使用MapKitAPI开发地图应用程序。其核心是MKMapView类使用。我们可以设置地图显示方式、控制地图,可以在地图上添加标注。
显示地图
在MapKitAPI中显示地图的视图是MKMapView,它的委托协议是MKMapViewDelegate。MapKitAPI使用需要导入MapKit框架。
下面我们通过一个案例介绍一下面我们介绍一下MapKitAPI的使用。这个案例在“输入查询地点关键字”文本框中输入关键字,点击“查询”按钮,先进行地理信息编码查询,查询获得地标信息后,在地图上标注出来。
首先添加框架MapKit.framework。然后在工程中打开MainStoryboard.storyboard的IB设计,从对象库中拖拽MapView到设计画面中。
调整它的位置和大小使得MapView尽可能填出画面下面的空白部分,然后为MapView定义输入出口。下面我们看看主视图控制器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
由于使用MapKitAPI,需要引入头文件<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设备中显示用户位置方式是一个发亮的蓝色小圆点。
[_mapViewsetUserTrackingMode:MKUserTrackingModeFollowanimated: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-邓白氏-编码申请
location-cleaned 定位ios15.0 最新驱动-iOS专用
苹果中文版iOS应用开发指南-2012.12.5版.pdf
这是有关于苹果内购文档的集合,里面主要讲述了内购流程的实现原理!以及苹果充值因苹果保密规则衍生的一系列刷单手段的防刷策略
iOS常用第三方类库 - CocoaChina 苹果开发中文站 - 最热的iPhone开发社区 最热的苹果开发社区 最热的iPad开发社区1
苹果iOS开发中文电子书推荐:4--iPhone开发基础中文教程.part1
iOS绘图教程 - CocoaChina 苹果开发中文站 - 最热的iPhone开发社区 最热的苹果开发社区 最热的iPad开发社区1
苹果IOS系统6.1.3--6.1.5完美越狱教程
苹果iOS开发中文电子书推荐:5--iPhone开发秘籍中文实践教程PART1
获取你所在位置的所有参数
这篇开发原则涵盖了苹果iOS开发的关键要点和注意事项。它强调了深入了解iOS生态系统、精通编程语言、熟悉开发工具、掌握核心框架、适配不同设备和屏幕、遵循设计准则、注重性能和内存管理、测试和调试、遵循App ...
苹果虚拟摄像头|无人直播|虚拟相机deb|硬改手机摄像头|搬运去重|tiktok抖音搬运直播ios无人直播虚拟视频虚拟相机deb文件ios虚拟视频无人直播-appel6键deb最新版摄像头模块,不限时长,高清不卡顿!ios虚拟视频无人...
苹果ios开发100个实例源码; 个人信息输入表(支持表单增删) 二维码扫描应用demo 二维码生成器 从GIF动画创建一个动态UIImages 对象 从上往下拉出现加载view,动态加载内容 从上往下拉动态加载 从上往下拉动态加载3 ...
iOS是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等产品上。iOS与苹果的Mac OS X操作系统一样...
ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例
苹果ios开发150个实例源码大全: 一个画板,可以选择画笔的颜色 一个简单的page scroll 一个简单的rss阅读器 一个简单的分享到facebookdemo 一个简单的图片编辑器 一个简单的层管理 一个简单的空白页面demo 一个...
前两年IOS应用源码-主要是用于毕业设计学习的。
iOS开发-查看各种格式文档-DocInteraction 苹果官方demo,多格式文档查看
【Object-C】ios苹果app开发入门object-c例子demo14个实例 一般编程问题 【实例简介】 ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例 【实例截图】 【核心代码】 归档 ├── Air...