文档章节

iOS 发送位置消息

极光推送
 极光推送
发布于 2017/05/02 10:29
字数 481
阅读 25
收藏 0

发送地理位置在社交应用里面是很常用的需求。最近也需要在自己的应用里面加入这个功能

首先我们需要获取自己的地理位置,这里用到 CLLocationManager 这个类,调用如下代码

    locationManager = CLLocationManager()
    locationManager.requestAlwaysAuthorization()
    locationManager.delegate = self // 在成功获取位置后,就会把位置回调给 self
    locationManager.distanceFilter = kCLDistanceFilterNone
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.startUpdatingLocation() // 在执行这个方法之后,系统就会不断获取手机所在的位置并且把这个位置回调给应用

我们在回调方法里面获取该这个地理位置

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    locationManager.stopUpdatingLocation() // 注意这个地方需要关闭定位,不然会不断的回调这个方法
   manager.delegate = nil; // 不加这段代码可能还是会调用几次
    let location = locations[0]  //这个就是我们当前所在的位置   类型为:CLLocation ,里面包含了经度和纬度
  }

如果要达到微信那种预览位置效果的话,我们需要通过位置获取一张截图, 因为我们不可能放一个 mapView 到消息列表上,这样内存肯定受不了。

所以我们使用 MKMapSnapshotter, 这个类可以获取地图上的一小块截图,代码如下

    let mapShoot = MKMapSnapshotter(options: options)
    mapShoot.start { (mapshoot, error) in
      let image = mapshoot!.image  // 这就是我们需要的位置截图
      let finalImageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)

      // 如果想在地图上加入一个大头针,可以直接绘制上去,就像下面一样
      let pin = MKPinAnnotationView()
      let pinImage = pin.image
      UIGraphicsBeginImageContextWithOptions(image.size, true, image.scale)
      image.draw(at: CGPoint(x: 0, y: 0))
      pinImage?.draw(at: CGPoint(x: finalImageRect.size.width/2, y: finalImageRect.size.height/2))
      let finalImage = UIGraphicsGetImageFromCurrentImageContext()
      self.locationDelegate.locationImageCallBack(location: location,image: finalImage)
    }

之后的就只需要处理发送位置和接收位置消息了。 如果想看源码可以点击传送门 源码 在 dev 分支


作者:HuminiOS - 极光

原文:iOS 发送位置消息

知乎专栏:极光日报

© 著作权归作者所有

共有 人打赏支持
极光推送
粉丝 41
博文 130
码字总数 135836
作品 1
深圳
个人站长
iOS 消息推送原理及实现总结

一、消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1、 Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provide...

mahb520
2013/05/08
0
1
iOS-Security 苹果安全白皮书都讲了些啥?

2017.03.27 原文地址 使用Google 按段落翻译(上传文档的不太准),通读一遍后去掉设备或网络的超专业术语,也算是筛选掉对开发者意义不大的信息吧! 苹果设计的 iOS 平台向来是以安全为核心...

si1ence
2017/12/14
0
0
一分钟越狱 iOS 11.4|世界顶级黑客大会 DEFCON 议题详解

雷锋网编者按:苹果公司在 macOS 和 iOS 中都采用了沙盒机制保护系统不受恶意软件的攻击。在世界著名的黑客大会 DEFCON 的这次演讲中,来自阿里安全的安全研究员分析了最新版的 iOS 中的沙盒...

李勤
08/13
0
0
iOS开发系列--通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。iOS中通知机制又叫消息机制,其包...

TomatosX
2015/03/19
0
0
(转)直接拿来用!最火的iOS开源项目(二)

“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目...

孙启超
2013/06/21
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

go语言学习总结

一、描述 go语言是直接将源码编译成二进制机器码的语言;它支持面向对象、也支持函数式编程;支持并发很容易; 二、基本语法学习路径 https://studygolang.com/subject/2...

盼望明天
15分钟前
1
0
JSP 九大内置对象及其作用域

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception ,下面就简单介绍下。 1、request 对象 request 对象...

几个栗子
27分钟前
0
0
Java中的坑之方括号

Java中的坑之方括号 这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。 问题描述 在做数据统计的时候,遇见了如下形式的数...

星汉
37分钟前
1
0
[雪峰磁针石博客]python机器学习、web开发等书籍汇总

Building Machine Learning Systems with Python Third Edition - 2018.pdf 下载地址 Get more from your data by creating practical machine learning systems with Python Key Features ......

python测试开发人工智能安全
48分钟前
1
0
文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部