我正在研究一個應用程序,其中有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. 多個CLLocationManagers有超過20個監控區域
- 2. 區域監控
- 3. 20個地區的地點經理限制是否意味着20個地理圍欄和信標區域?
- 4. 如何監控xcode中的許多區域?
- 5. 如何添加20多個geofenced本地通知?
- 6. 地理和信標監測區域是否合計了iOS上的20個區域限制?
- 7. 安卓區域監控?
- 8. iOS5區域監控精度
- 9. 區域iOS上的監控
- 10. 地區監測和背景
- 11. 地區一致性監測
- 12. 重要區域更改/區域監控
- 13. 監控多進程
- 14. 如何監控FIFO?
- 15. 如何監控eaccelerator
- 16. 的iOS地理柵欄如何在區域內部監控時開始
- 17. 如何在單個控制檯上對20多個網站進行測試?
- 18. 有效地監控int值
- 19. 如何監控多個網站的可用性
- 20. AngularJS - 如何在多個控制器中共享監視對象?
- 21. 如何在一臺服務器上監控多個Web項目?
- 22. Java監控多個文件夾
- 23. 同時監控多個日誌文件
- 24. 監控多個文件,從Windows啓動
- 25. 監控多個網頁/ rss訂閱
- 26. 監控Twitter的多個單詞/標籤?
- 27. 如何監控整個網站
- 28. 如何監控每個http請求?
- 29. 可以SimpleXMLRPCServer監聽多個地址嗎?
- 30. 如何在地理海圖中顯示多個地區
我在哪裏把這樣:var currentLocation:CLLocation { didSet { evaluateClosestRegions() }} – andre
@andre您應就其採用'cllocationmanagerdelegate'協議類的屬性。基本上你得到'didUpdateLocation'回調的是同一個類。 – Honey
我做到了,但函數evaluateClosestRegions永遠不會被調用 – andre