在将 MKOverlayRenderer 的 alpha 属性传递给地图后,如何访问和修改它?
事实上,我可以修改rendererForOverlay
方法中的 alpha 属性:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKTileOverlay class]]) {
MKTileOverlayRenderer *renderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
renderer.alpha = 0.6;
return renderer;
}
return nil;
}
但是只有当我向 mapView 添加 Overlay 时才会调用此方法,对吧?
所以我的问题是:即使在我的 Overlay 已经在地图上渲染之后,有没有办法改变和设置这个 alpha 属性的值?
我尝试将渲染器添加到 NSMutableArray 中:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKTileOverlay class]]) {
_allRenderer = [[NSMutableArray alloc] init];
MKTileOverlayRenderer *renderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
renderer.alpha = 0.0;
[_allRenderer addObject:renderer];
return renderer;
}
return nil;
}
然后我可以通过调用我所做的这个方法来改变透明度:
-(void)changeAlpha:(NSUInteger)index : (BOOL)isOpaque {
if (isOpaque)
[[_allRenderer objectAtIndex:index] setAlpha:0.0];
else
[[_allRenderer objectAtIndex:index] setAlpha:1.0];
}
有没有更好的方法来做到这一点?仅设置 alpha 值似乎是一个缓慢的过程。
实际上我想动态地将我的 OverlayRenderer 的 alpha 值从 0 切换到 1,这样我就可以显示 1 Overlay,隐藏它,显示另一个,隐藏它等等......