iOS开发之地图与定位

  无论是QQ还是微信的移动客户端都少不了定位功能,之前在微信demo中没有添加定位功能,今天就写个定位的小demo来了解一下定位和地图的东西。地图和定位看上去是挺高大上一东西,其实用法比TableView简单多了,下面的Demo是用的iOS中自带的地图和定位,当然了也可以用第三方的来加载地图,比如百度地图啥的,在这就不赘述了。今天的博客主要是介绍MKMapView的使用,MapView的使用和其他组件的用法差不多,MapView用的是委托回调,在使用mapView的Controller中要实现MKMapViewDelegate协议,并注册委托回调,然后实现相应的回调方法即可。

  一,构建Demo的组件

    为了节省时间这个demo中的MapView是用Storyboard拖出来的,storyboard中的结构如下所示,上面是MKMapView用于显示地图,下面的labei用于显示当前经纬度:

  二,引入MKMapView要用的包,截图如下:

  三、编写标注模块的类

    1.首先解释一下标注模块是什么东西:标注模块就是显示当前地理位置的信息,下面图种绿色框中是标注模块:

    2.编写标注类,标注类必须实现MKAnnotation协议,MyAnnotation.h中的代码如下:

    3.实现协议MyAnnotation中的方法,titile返回的是标题,subTitle是子标题,代码如下:

  四、编写ViewController中的代码

    1.ViewController.h中要引入相应的包和实现相应的协议代码如下

    2.编写ViewController.m中的代码,实现协议中相应的委托回调方法,.m中的延展和初始化方法如下

    3.实现委托回调中的标注视图,代码截图如下:

    4.获取地理位置信息,代码如下:

 1 //实现协议中的方法获取坐标
 2 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
 3 {
 4     //获取location
 5     CLLocation *location = userLocation.location;
 6     
 7     //通过location获取经纬度
 8     CLLocationCoordinate2D coordinate = location.coordinate;
 9     
10     
11     //显示经纬度
12     [self mapPoint:coordinate];
13     
14     
15     //标记范围
16     MKCoordinateSpan span;
17     span.latitudeDelta=0.1;
18     span.longitudeDelta=0.1;
19     MKCoordinateRegion region={coordinate ,span};
20     
21     [self.myMapView setRegion:region];
22     
23     
24 
25     __block __weak ViewController *copy_self = self;
26 
27     //解析地理位置
28     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
29     [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
30         if (placemarks.count > 0) {
31             //使用CLPlacemark解析地理位置
32             CLPlacemark *placeMark = placemarks[0];
33             NSDictionary *addressDictionary = placeMark.addressDictionary;
34     
35             
36             //添加地图的标注
37             MyAnnotation *annotation = [[MyAnnotation alloc] init];
38             annotation.subTitle = addressDictionary[@"Name"];
39             annotation.coordinate = coordinate;
40             
41             //添加标注信息
42             [copy_self.myMapView addAnnotation:annotation];
43         }
44     }];
45   
46 }

View Code

  以上是Demo的所有代码,下面是运行的效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

傲游浏览器漏洞系列(上)- 任意文件写入,UXSS

原作者:Neil Bergman 译:Holic (知道创宇404安全实验室) 译者测试环境:Maxthon 4.5.6,Android 5.1.1 / And...

31140
来自专栏张戈的专栏

解决Centos下vsftp无法上传文件的问题,附vsftp配置详解

重量网络最近买了一个腾讯云的 VPS,一直在折腾着,偶然请我帮忙敲几行命令解决一些小问题。 这不,今天他通过 yum 在线安装了一个 vsftp 后,发现不太会...

75160
来自专栏Golang语言社区

几种服务器端IO模型的简单介绍及实现(下)

5、使用事件驱动库libevent的服务器模型 Libevent 是一种高性能事件循环/事件驱动库。 为了实际处理每个请求,libevent 库提供一种事件机制...

38790
来自专栏Django中文社区

拓展 User 模型

Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息。对于 Django 内置的 User 模型, 仅包含以下一些主...

36950
来自专栏用户2442861的专栏

Epoll详解及源码分析

对于水平触发模式(LT):在1处,如果你不做任何操作,内核依旧会不断的通知进程文件描述符准备就绪。

16020
来自专栏陈满iOS

iOS开发·设置状态栏颜色的小结与误区

28240
来自专栏蓝天

linux下top命令参数解释

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。

11810
来自专栏Hadoop实操

Cloudera Manager首页

当你从Cloudera Manager进入“主页 -> 状态”时,会看到如下页面,实际也就是Cloudera Manager的主页。

607110
来自专栏Android开发指南

eclipse遇到的问题

415100
来自专栏用户2442861的专栏

操作系统八内存管理

      CPU可以在一个cpu时钟内执行一个或多个其内置寄存器的指令。而访问内存需多个cpu时钟。由于内存频繁访问,可以再cpu与内存之间增加高速缓存

11310

扫码关注云+社区

领取腾讯云代金券