我正在使用Mapbox iOS SDK在我的iOS应用中显示离线OpenStreetMaps数据。我已经以编程方式成功完成了这项工作,但现在我想使用Interface Builder来完成这项工作。为此,我创建了一个带有.xib文件的UIViewController的子类,并将UIView放入xib的主视图中。然后在身份检查器中,我将此视图的自定义类更改为RMMapView,并将IBOutlet放入UIViewController的标头中,并将其与xib中的Custom RMMapView对象连接。
@property (weak, nonatomic) IBOutlet RMMapView *mapView;
到目前为止,我认为这应该是正确的。当我启动应用程序时,在笔尖中创建RMMapView并显示默认行为,即它显示带有“示例”水印的地图。因此我需要设置适当的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没有通过nib正确初始化,最重要的是RMTileSourcesContainer没有被初始化。这是真的吗?为什么initWitCoder没有被覆盖?我应该如何在Interface Builder中使用RMMapView? 谢谢你的帮助!!
答案 0 :(得分:1)
您想在-viewWillAppear:
或更高版本中尝试此操作,而不是-viewDidLoad
。由于RMMapView
基于UIScrollView
的方式,地图视图需要先添加到实时视图层次结构中,然后才能设置其参数。