我正在使用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。有人可以提供一些简单的代码来帮助我实现目标。在此先感谢您的时间。
答案 0 :(得分: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:我只关注这里解释你现在得到的错误。这个添加/删除磁贴逻辑也可能是错误的。我认为您仍然需要保存相同的引用才能添加并稍后删除。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
这就是我的用途。卢卡斯的回答略有调整。这将交替关闭地图。感谢您的回复。
//.h
@property BOOL *isChecked;
//.m
self.isChecked = !self.isChecked;
if((self.isChecked)) {
[_mapView addTileSource:onlineSource atIndex:1];
} else {
[_mapView setHidden:YES forTileSourceAtIndex:1 ];