1

我正在使用 IBAction 按钮打开地图图层。此代码在点击按钮时将其打开。

- (IBAction)lightingLayer:(id)sender {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

现在我想调整它,当用户点击它一次时,图层就会打开。当它再次被点击时,它会打开等等。我通过从类似示例中借用代码来尝试它,但它不起作用。

- (IBAction)lightingLayer:(id)sender {

_Bool *isON = NULL; 

isON = !isON;

if(isON) {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

} else {

[_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

这个标志,不兼容的整数到从 int 分配 bool 的指针转换。有人可以提供一些简单的代码来帮助我实现我的目标。在此先感谢您的时间。

4

3 回答 3

1

此错误是因为您将 bool 值分配给指针。指针只不过是一个整数值,它将内存位置保存为十六进制数。

但实际上,要完成你想要的,你不需要指针,只需使用一个属性来存储这个 bool 并创建一个切换功能。

声明这个私有财产:

@property (strong, assign) BOOL isChecked; 

在你的行动中:

- (IBAction)lightingLayer:(id)sender {

    self.isChecked = !self.isChecked;

    if(self.isChecked) {

        [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

    } else {

         [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    }
}

Ps:我在这里只专注于解释您现在遇到的错误。这个添加/删除图块逻辑也可能是错误的。我认为您仍然必须保存相同的引用以添加和稍后删除。

于 2013-08-23T02:54:28.333 回答
1

这样做

BOOL isON;
- (IBAction)lightingLayer:(id)sender {
if(isON) {

    [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    isON=NO;

} else {

    [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    isON=YES;

}
于 2013-08-23T12:34:03.813 回答
0

这就是我一起去的。卢卡斯的回答略有调整。这将交替打开和关闭地图。感谢您的回复。

//.h

@property BOOL *isChecked;


//.m

self.isChecked = !self.isChecked;

if((self.isChecked)) {

[_mapView addTileSource:onlineSource atIndex:1];

} else {

[_mapView setHidden:YES forTileSourceAtIndex:1  ];
于 2013-09-02T20:46:50.650 回答