如何在IBAction按钮中初始化平铺源

时间:2013-10-09 01:04:07

标签: ios objective-c reference initialization mapbox

在我的项目中,我有多个平铺源,我添加到地图中。我为每个磁贴源都有一个按钮。我想在第一次按下时按钮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");
    }
}

当我第一次按下按钮时,地图加载,我得到“是”。当我第二次按它时,地图没有关闭,我得到“否”。这几乎总结了我的问题

1 个答案:

答案 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");
    }
}