文档章节

iOS 发送位置消息

极光推送
 极光推送
发布于 2017/05/02 10:29
字数 481
阅读 31
收藏 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 发送位置消息

知乎专栏:极光日报

© 著作权归作者所有

共有 人打赏支持
极光推送
粉丝 43
博文 185
码字总数 195920
作品 1
深圳
个人站长
私信 提问
Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收(九)

Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6926746 ...

彭博
2012/03/09
770
0
iOS 在 Flash 中集成消息推送服务

在Flash平台上用ActionScript应用程序接口开发具有Push通知功能的iOS应用是非常耗时的过程,同时我们也知道时间非常珍贵。因此,这篇文章的主要目标就是让哪些使用Flash给iPhone开发具有Pus...

oschina
2014/05/15
2.1K
3
iOS与JS交互之WKWebView-WKScriptMessageHandler协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKJSMessageHandler」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/09/02
0
0
openfire 奇怪的群离线消息接收问题

有个奇怪问题,想咨询一下思路: 使用openfire搭建了一个IM,目前是IOS的苹果手机发送的离线消息,在安卓手机上会出现重复的接收,每次退出再次进入该群组,都会重复收到这条消息,但是安卓的...

mysisc
2014/04/04
1K
0
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
6
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
6
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
4
0
解决SVN:E210007无法协商认证机制

svn:E210007 svn: Cannot negotiate authentication mechanism 执行下面代码即可 sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap...

临江仙卜算子
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部