我们使用app的时候,很多软件都自带了地图功能。我们可以看到自己的位置,看到周围商场等信息。我们也可以导航,划线等。

其实苹果的MapKit使用起来还是很简单的。这里简单的介绍一下。

0.使用前准备

1.导入MapKit.framework框架

2.在工程的info.plist中增加两行字段(ios8必须做这两个步骤)

NSLocationAlwaysUsageDescription
NSLocationWhenInUseDescription
 
3.在storyboard普通控制器中,拖一个mapKitView,并设置好约束,并连线获得属性
//地图
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
 
 
1.向用户获取定位授权
在一个普通的控制器中,导入头文件,

#import <MapKit/MapKit.h>

#import <CoreLocation/CoreLocation.h>

CoreLocation是核心定位

设置一个CLLocationManager属性,用于请求授权

//位置管理器
@property (nonatomic, strong) CLLocationManager *manager; //懒加载位置管理器
- (CLLocationManager *)manager
{
if (_manager == nil) {
_manager = [[CLLocationManager alloc] init];
}
return _manager;
}

然后请求访问位置,并设置地图跟踪模式

    //请求允许访问位置
[self.manager requestAlwaysAuthorization]; //当前地图跟踪模式
self.mapView.userTrackingMode = MKUserTrackingModeFollow;

这时候 ,我们真机运行就能定位到自己的位置了(模拟器可以自己设置经纬度),那个蓝色的大圆点就是我们的位置,俗称大头针

2.添加大头针描述

我们点击大头针的时候,希望看到当前的位置信息。这里我们可以来设置一下。

先设置mapView的代理为self,并遵守代理

    //设置地图代理
self.mapView.delegate = self;

在实现下面的代理方法,此方法每次位置变动,都会调用

//更新位置的时候,会触发
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
NSLog(@"");
//当前的坐标,反编码
CLGeocoder *geo = [[CLGeocoder alloc] init];
[geo reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray *placemarks, NSError *error) {
//取出标记
CLPlacemark *pm = [placemarks lastObject];
//赋值
userLocation.title = pm.name;
}]; }

上面的CLGeocoder是一个地理编码解析器。可以将位置信息转为给定名称。也可以将给定的名称(例如北京)装换为位置信息(经纬度等等)。

userLocation中,只有location位置信息。我们可以转为具体的地理名称

实现上面的代理之后,我们点击蓝色大头针,就可以看到具体的信息啦。

3.添加大头针

我们点击地图其它的地方,希望可以钉一个大头针,手指点哪里,哪里就钉一个

这个做法其实也很简单,我们需要自定义一个大头针类,遵守MKAnnotation协议,并实现协议内容

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h> @interface HJCAnnotion : NSObject <MKAnnotation> //位置(必选)
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
//标题(可选)
@property (nonatomic, copy) NSString *title;
//子标题(可选)
@property (nonatomic, copy) NSString *subtitle; @end

先给mapView添加手势

    //创建手势
UITapGestureRecognizer *top = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addMyAnootation:)];
//加入地图上
[self.mapView addGestureRecognizer:top];

在实现手势方法

//点击地图时候,添加大头针的方法
- (void)addMyAnootation:(UITapGestureRecognizer *)top
{
//获得手点击的坐标
CGPoint touchPoint = [top locationInView:top.view];
//装换为地图的坐标
CLLocationCoordinate2D cd = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView]; //创建自定义的大头针
HJCAnnotion *annotation = [[HJCAnnotion alloc] init];
//设置大头针的坐标
annotation.coordinate = cd;
//设置大头针的标题
annotation.title = @"呵呵"; //添加到地图中
[self.mapView addAnnotation:annotation]; }

4.自定义大头针View

我们加入不想用系统默认的红头的大头针,我们就可以自定义大头针的view了。通过代理实现。这里需要考虑view重用的问题

返回nil就表示用系统默认的

//自定义大头针view
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
//假如是定位的蓝色大头针,直接返回nil
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
} //可重用ID
static NSString *viewID = @"myAnnotation";
//从缓存池中取
MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:viewID];
//加入没有重新创建
if(annoView == nil){
annoView = [[MKAnnotationView alloc] init];
}
//赋值
annoView.image = [UIImage imageNamed:@"category_1"];
//返回
return annoView;
}

ios开发-MapKit(地图框架)使用简介的更多相关文章

  1. ios开发--高德地图SDK使用简介

    高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对 ...

  2. iOS开发UI篇—核心动画简介

    转自:http://www.cnblogs.com/wendingding/p/3801036.html iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画 ...

  3. iOS 开发之照片框架详解

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  4. iOS 开发之照片框架详解(2)

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

  5. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  6. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  7. iOS开发系列--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  8. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  9. ReactiveCocoa - iOS开发的新框架

    本文转载至 http://www.infoq.com/cn/articles/reactivecocoa-ios-new-develop-framework ReactiveCocoa(其简称为RAC ...

随机推荐

  1. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...

  2. [福大软工] W班 第2次成绩排行榜

    作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/866 评分细则 本次个人项目分数由三部分组成 ...

  3. 北京工业大学耿丹学院2016下C作业学习总结

    北京工业大学耿丹学院2016下C的班级地址在https://edu.cnblogs.com/campus/bjgygd/Sixteen-One . 第一次作业:两部分 第一部分:新建博客,书写第一篇随 ...

  4. beta冲刺3-咸鱼

    一,昨天的问题: 页面整理还没做 我的社团这边的后台数据库未完成,前端代码修改未完成. 二,今天已完成 页面整理基本完成,把登陆独立出来了,然后基本处理掉了多余页面(反正也没几个--) 我的社团这边试 ...

  5. Beta版本敏捷冲刺每日报告——Day1

    1.情况简述 Beta阶段第一次Scrum Meeting 敏捷开发起止时间 2017.11.2 08:00 -- 2017.11.2 21:00 讨论时间地点 2017.11.2晚6:00,软工所实 ...

  6. Beta阶段敏捷冲刺报告-DAY5

    Beta阶段敏捷冲刺报告-DAY5 Scrum Meeting 敏捷开发日期 2017.11.6 会议时间 12:00 会议地点 软工所 参会人员 全体成员 会议内容 乱序问题的解决,异常输入提示 讨 ...

  7. Beta冲刺 第二天

    Beta冲刺 第二天 1. 昨天的困难 由于前面的冲刺留下的问题很多,而且混乱的代码给我们接下来的完善工作带来了巨大的困难. 2. 今天解决的进度 潘伟靖: 1.对代码进行了review 2.为系统增 ...

  8. android 时间获取以及时间格式化

    Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现 现总结如下: 方法一: void getTime1 ...

  9. BM V7000数据恢复成功案例;服务器数据恢复

    IBM V7000存储是一款定位中端的存储设备,很多企业选择该服务器作为存储,最近北亚数据恢复中心接到一例V7000服务器数据恢复案例,下面将对本次数据恢复的过程和数据恢复方法进行归纳总结,希望对各位 ...

  10. Something about SeekingJob---Resume简历

    这几天脑子里满满的装的都是offer.offer.offer快到碗里来,但是offer始终不是巧克力,并没那么甜美可口易消化. 找工作刚开始,就遇到了不小的阻力,看到Boss直聘上各种与IT相关的工作 ...