在我的项目中,我有多个平铺源,我添加到地图中。我为每个磁贴源都有一个按钮。我想在第一次按下时按钮addTileSource,然后下一次removeTileSource并继续以这种方式交替。我的问题是它不会删除TileSource,因为它删除了每次按下按钮时创建的另一个myTileSource,因为我在if语句之前初始化了对象。我该如何解决这个问题?我已尝试在viewDidLoad和if语句中初始化tile源,但它在我调用的其他位置错误地使用了“未声明的标识符”。请查看我的代码,并就如何实现预期目标提出建议。谢谢你的时间。
- (IBAction)LayerButton:(id)sender
{
RMMBTilesSource *myTileSource = [[RMMBTilesSource alloc] initWithTileSetURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MapName" ofType:@"mbtiles"]]];
FirstViewController *FVC = [self.tabBarController.viewControllers objectAtIndex:0];
self.phase3BIsChecked = !self.phase3BIsChecked;
if((self.phase3BIsChecked)) {
[[FVC mapView] addTileSource:myTileSource];
self.phase3BButtonView.backgroundColor = [UIColor blueColor];
} else {
self.phase3BButtonView.backgroundColor = [UIColor lightGrayColor];
[[FVC mapView] removeTileSource:myTileSource];
}
NSLog(@"Map Index = %@", [[[FVC mapView] tileSources] description]);
if ([[[FVC mapView] tileSources] containsObject:myTileSource]) {
NSLog(@"YES");
} else {
NSLog(@"NO");
}
}
当我第一次按下按钮时,地图加载,我得到“是”。当我第二次按它时,地图没有关闭,我得到“否”。这几乎总结了我的问题
答案 0 :(得分:1)
在视图控制器的接口定义中,添加此变量定义:
RMMBTilesSource *myTileSource;
在视图控制器的viewDidLoad
中,添加以下内容:
myTileSource = [[RMMBTilesSource alloc] initWithTileSetURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MapName" ofType:@"mbtiles"]]];
您的LayerButton
行动可以成为:
- (IBAction)LayerButton:(id)sender {
FirstViewController *FVC = [self.tabBarController.viewControllers objectAtIndex:0];
self.phase3BIsChecked = !self.phase3BIsChecked;
if((self.phase3BIsChecked)) {
[[FVC mapView] addTileSource:myTileSource];
self.phase3BButtonView.backgroundColor = [UIColor blueColor];
} else {
self.phase3BButtonView.backgroundColor = [UIColor lightGrayColor];
[[FVC mapView] removeTileSource:myTileSource];
}
NSLog(@"Map Index = %@", [[[FVC mapView] tileSources] description]);
if ([[[FVC mapView] tileSources] containsObject:myTileSource]) {
NSLog(@"YES");
} else {
NSLog(@"NO");
}
}