gpt4 book ai didi

ios - 缓存的图 block 不显示 - Mapbox IOS SDK

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:11 26 4
gpt4 key购买 nike

我是 iOS 编程的新手,我正在使用 Swift 为 iOS8 构建我的应用程序,并且还实现了 Mapbox-ios-sdk,因为我希望我的用户能够下载离线 map 区域。

我已经能够在缓存中下载离线 map 区域,但是当我关闭 Wifi 和蜂窝数据时似乎无法访问缓存。 map 图 block 没有出现。仅显示自动缓存的 map 图 block 。

我看到正在下载图 block (RMTileCache.db 正在增长,正在调用 RMTileCacheBackgroundDelegate 方法 didBeginBackgroundCacheWithCount、didBackgroundCacheTile 和 tileCacheDidFinishBackgroundCache),并且在直接查看 db 文件时,我还看到已下载正确的图 block 。

但是,当我随后关闭 Wifi 和蜂窝数据时, map 图 block 不会加载到屏幕上。我已经尝试了几个选项来添加额外的 RMDatabase 缓存等,但似乎没有任何效果。我希望有人遇到同样的问题并能帮助我。

我的代码大致基于这里的这篇文章:http://mapbox.com/mapbox-ios-sdk/#tile_caching__class

类(class)相关变量:

var tileSource: RMMapboxSource = RMMapboxSource()
@IBOutlet var mapView: RMMapView!

viewDidLoad:

    override func viewDidLoad() {
super.viewDidLoad()

let fullPath: String = NSBundle.mainBundle().pathForResource("mapbox", ofType: "json")!
var errorInFullPath:NSErrorPointer? = NSErrorPointer()
let tileJSON: String? = String(contentsOfFile: fullPath, encoding:NSUTF8StringEncoding, error: errorInFullPath!)
tileSource = RMMapboxSource(tileJSON: tileJSON)

initializeMap()

}

map 初始化:

func initializeMap() {
mapView = RMMapView(frame: self.view.bounds)
mapView.tileSource = tileSource
tileSource.cacheable = true
mapView.adjustTilesForRetinaDisplay = true
mapView.userInteractionEnabled = true
mapView.zoom = 9
self.view.addSubview(mapView)
mapView.delegate = self
}

下载操作:

func startDownload() {
mapView.tileCache.backgroundCacheDelegate = self
mapView.tileCache.beginBackgroundCacheForTileSource(tileSource, southWest: sw, northEast: ne, minZoom: 1, maxZoom: zoomLevel)
}

sw、ne 和 zoomLevel 已在代码的其他地方定义,当我在 beginBackgroundCacheForTileSource 命令之前打印它们时,它们的值很好。

我不确定我在这里做错了什么。可能真的很愚蠢,但我已经尝试找到它 2 天了。希望有人能帮助我。

提前致谢!

最佳答案

好吧,多亏了 incanus 的尖端,我让它工作了。事实证明这是两个问题,这使得分析和查找根本原因变得更加困难。

第一个问题确实是我在 viewDidLoad 中进行了一些布局工作,这以某种方式阻止了加载已兑现的 map 图 block 。

第二个问题是我正在下载的区域与我认为正在下载的区域略有不同。所以我只需要调整 RMMapView 的 pixelToCoordinate 方法,我正在使用它来获得正确的结果。

对于那些感兴趣的人。我创建了一个单独的干净的 swift 文件,里面没有任何布局,只是为了跟进 Incanus 的评论。这对我有用!

感谢 Incanus。希望其他人也会发现这很有用。

import UIKit

class ViewOfflineMapAreaViewController: UIViewController, RMMapViewDelegate {

var tileSource: RMMapboxSource = RMMapboxSource()
@IBOutlet var mapView: RMMapView!

override func viewDidLoad() {
super.viewDidLoad()

let fullPath: String = NSBundle.mainBundle().pathForResource("mapbox", ofType: "json")!
var errorInFullPath:NSErrorPointer? = NSErrorPointer()
let tileJSON: String? = String(contentsOfFile: fullPath, encoding:NSUTF8StringEncoding, error: errorInFullPath!)
tileSource = RMMapboxSource(tileJSON: tileJSON)
tileSource.retryCount = 3
initializeMap()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

func initializeMap() {
mapView = RMMapView(frame: self.view.bounds)
mapView.tileSource = tileSource
tileSource.cacheable = true
mapView.adjustTilesForRetinaDisplay = true
mapView.userInteractionEnabled = true
mapView.zoom = 9
mapView.delegate = self


//These two lines are just to resize the mapView upon device rotation
mapView.setTranslatesAutoresizingMaskIntoConstraints(true)
mapView.autoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth
}

override func viewDidAppear(animated: Bool) {
self.view.addSubview(mapView)
}

}

关于ios - 缓存的图 block 不显示 - Mapbox IOS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com