iOS 傳送位置訊息
傳送地理位置在社交應用裡面是很常用的需求。最近也需要在自己的應用裡面加入這個功能
首先我們需要獲取自己的地理位置,這裡用到 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 分支
相關文章
- iOS 給父類傳送訊息iOS
- iOS 訊息傳送與轉發詳解iOS
- 訊息中介軟體—RocketMQ訊息傳送MQ
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- RocketMQ(九):訊息傳送(續)MQ
- TNW-傳送模板訊息TNW
- 6-RocketMQ傳送訊息MQ
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- RocketMQ中Producer訊息的傳送MQ
- 傳送不同型別的訊息型別
- RocketMQ -- 訊息傳送儲存流程MQ
- Kafka -- 訊息傳送儲存流程Kafka
- 快速向 Google Chat 傳送訊息Go
- Runtime備忘-訊息傳送流程
- 分散式事務:訊息可靠傳送分散式
- django+小程式傳送模板訊息Django
- Python呼叫飛書傳送訊息Python
- WIN32傳送自定義訊息Win32
- 以事務方式傳送 Kafka 訊息Kafka
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 一張圖進階 RocketMQ - 訊息傳送MQ
- RocketMQ - 生產者訊息傳送流程MQ
- Laravel 佇列訊息與傳送郵件Laravel佇列
- Android Handler 訊息傳送效能優化Android優化
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- Pulsar訊息傳送、消費架構概述架構
- Kafka、RabbitMQ、RocketMQ訊息中介軟體的對比 —— 訊息傳送效能KafkaMQ
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- 千牛自動傳送訊息怎麼發?來試試UiBot千牛訊息傳送機器人UI機器人
- 小碼哥iOS學習筆記第十三天:訊息傳送iOS筆記
- 在python中使用itchat傳送微信訊息Python
- 圖解RocketMQ訊息傳送和儲存流程圖解MQ
- [Akka]傳送一條訊息的內部流程
- 從原始碼看 ObjC 中訊息的傳送原始碼OBJ
- win10玩dnf傳送不了訊息怎麼解決_win10玩dnf傳送不了訊息如何處理Win10