Of course.First, i check if the visiblelayer array is initialised. This is done in a synchronized code block, just to be sure. if (self.dynamicLayer.visibleLayers == nil){
NSLog(@"VisibleLayer is nil, initializing it.");
NSMutableArray *visLayers = [[NSMutableArray alloc]init];
for (AGSMapServiceLayerInfo* layer in self.dynamicLayer.mapServiceInfo.layerInfos){
if (layer.parentLayerID != -1){
if (layer.defaultVisibility ){
[visLayers addObject:[NSNumber numberWithUnsignedInt:layer.layerId]];
}
}
}
self.dynamicLayer.visibleLayers = [visLayers mutableCopy];
[visLayers autorelease];
}
}
No problems there.Next, when i want to change the visibillity of the layers, i use the following function:- (void) setLayerVisibillity:(NSNumber *)layerId :(Boolean)visibillity
{
NSMutableArray *visibleLayers = [self.dynamicLayer.visibleLayers mutableCopy];
if (visibillity && ![visibleLayers containsObject:layerId]){
[visibleLayers addObject:layerId];
} else {
[visibleLayers removeObject:layerId];
}
self.dynamicLayer.visibleLayers = [visibleLayers mutableCopy];
[visibleLayers release];
//Doesn't work...
//[self.dynamicLayer dataChanged];
//WorkAround, without the ZoomToEnvelope the layer visibillity doesnt change.
[self.mapView zoomToEnvelope:self.mapView.envelope animated:true];
}
The ZoomToEnvelope works like a charm, but it is a extra call. DOwnside, it reloads the data from the server, which is not nice if you are working over celluar data..More details:IOS 4.3.3iPad2 3G