V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jpush
V2EX  ›  iOS

iOS 发送位置消息

  •  
  •   jpush · 2017-05-02 10:32:54 +08:00 · 1634 次点击
    这是一个创建于 2769 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    首先我们需要获取自己的地理位置,这里用到 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 - 极光( JPush 为极光团队账号,欢迎关注)

    原文:iOS 发送位置消息

    知乎专栏:极光日报

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.