我正在研究一個應用程序,其中有66個註釋。這些註釋是地區的中心,每當用戶輸入一個地區時,都會顯示一條通知,但僅適用於其中的20個,因爲地區監控的數量有限。我的問題是我不知道如何監控20多個地區。誰能幫忙?如何監控20多個地區?
3
A
回答
1
設置currentLocation
從didUpdateLocations
var currentLocation : CLLocation?{
didSet{
evaluateClosestRegions()
}
}
var allRegions : [CLRegion] = [] // Fill all your regions
現在計算並找到最接近的區域,以您的當前位置,僅跟蹤這些。
func evaluateClosestRegions() {
var allDistance : [Double] = []
//Calulate distance of each region's center to currentLocation
for region in allRegions{
let circularRegion = region as! CLCircularRegion
let distance = currentLocation!.distance(from: CLLocation(latitude: circularRegion.center.latitude, longitude: circularRegion.center.longitude))
allDistance.append(distance)
}
// a Array of Tuples
let distanceOfEachRegionToCurrentLocation = zip(allRegions, allDistance)
//sort and get 20 closest
let twentyNearbyRegions = distanceOfEachRegionToCurrentLocation
.sorted{ tuple1, tuple2 in return tuple1.1 < tuple2.1 }
.prefix(20)
// Remove all regions you were tracking before
for region in locationManager.monitoredRegions{
locationManager.stopMonitoring(for: region)
}
twentyNearbyRegions.forEach{
locationManager.startMonitoring(for: $0.0)
}
}
爲了避免具有didSet
叫過很多次,我建議你設置distanceFilter
適當(不要太大,所以你會趕上該地區的回調太晚了,不會過小,你不會有多餘的代碼運行)。或者如this answer建議,只需使用startMonitoringSignificantLocationChanges
更新您的currentLocation
3
使用Apples API無法監視超過20個區域。
您必須將主動監測區域更新到最近的20個區域。
每當你進入/離開一個區域:
- 檢查輸入的位置
- 停止監視所有地區
- 開始監控最近的19個地區(以輸入的位置距離),再加上進入一個。
如果結果不令人滿意,您可能還需要監測重要的位置變化,以便有機會每隔500米更新監控區域,同時不要耗盡太多電量。
相關問題
- 1. 區域iOS上的監控
- 2. iOS5區域監控精度
- 3. 監控多進程
- 4. 如何監控eaccelerator
- 5. 的iOS地理柵欄如何在區域內部監控時開始
- 6. 如何在單個控制檯上對20多個網站進行測試?
- 7. 有效地監控int值
- 8. 如何監控多個網站的可用性
- 9. 如何在一臺服務器上監控多個Web項目?
- 10. 監控多個網頁/ rss訂閱
- 11. 監控Twitter的多個單詞/標籤?
- 12. 同時監控多個日誌文件
- 13. Java監控多個文件夾
- 14. 可以SimpleXMLRPCServer監聽多個地址嗎?
- 15. 如何從Arraylist獲得20 20 20個值?
- 16. 訪問控制JMX本地監控
- 17. VS 2010中的多監控
- 18. 區域在Geo-Fencing中多次調用的監控方法
- 19. iOS 8:區域監控,如何使其工作
- 20. 如何監控(微)服務?
- 21. 如何監控MySQL查詢
- 22. 如何監控廣告?
- 23. 如何監控MQPUT和MQGET?
- 24. 監控一個DLL
- 25. Erlang如何監督多個模塊
- 26. 位置管理區域監控
- 27. iOS:用模擬器監控區域
- 28. iBeacon(Kontakt Beacon)區域監控在android
- 29. 如何監控服務器(地圖服務器)
- 30. 如何監控IP地址與我的域名連接
我在哪裏把這樣:var currentLocation:CLLocation { didSet { evaluateClosestRegions() }} – andre
@andre您應就其採用'cllocationmanagerdelegate'協議類的屬性。基本上你得到'didUpdateLocation'回調的是同一個類。 – Honey
我做到了,但函數evaluateClosestRegions永遠不會被調用 – andre