我正在使用Mapbox iOS SDK在我的iOS应用中显示离线OpenStreetMaps数据。我已经以编程方式成功完成了此操作,但是现在我想使用Interface Builder来执行此操作。为此,我创建了一个带有.xib文件的UIViewController子类,并将UIView放入xib的主视图中。然后,在身份检查器中,我将此视图的Custom类更改为RMMapView,并将IBOutlet放入UIViewController的标头中,并将其与xib中的Custom RMMapView对象连接。
@property (weak, nonatomic) IBOutlet RMMapView *mapView;
到目前为止,我认为这应该是正确的。当我启动该应用程序时,将在笔尖中创建RMMapView并显示默认行为,即它显示带有“Example”水印的 map 。因此,我需要设置适当的tilesource,到目前为止,我是在ViewController的viewDidLoad方法中完成此操作的,例如
RMMBTilesSource *tileSource = [[RMMBTilesSource alloc] initWithTileSetResource:@"mymap" ofType:@"mbtiles"];
其次是
[self.mapView setTileSource:tileSource]
或者
[self.mapView addTileSource:tileSource]
但是,即使在这些调用之后,mapView的RMTileSourcesContainer仍然具有nil值,并且据我所知,set / addTileSource调用实际上没有任何作用。
在我看来,问题在于在RMMapView中,initWithCoder尚未被覆盖,因此RMMapView无法通过笔尖正确初始化,最重要的是RMTileSourcesContainer未初始化。真的是这样吗?为什么initWitCoder没有被覆盖?我应该如何在Interface Builder中使用RMMapView?
谢谢你的帮助!!
最佳答案
您想尝试使用-viewWillAppear:
或更高版本,而不是-viewDidLoad
。由于RMMapView
基于UIScrollView
的方式, map 视图需要先添加到实时视图层次结构中,然后才能设置其参数。