【发布时间】:2016-10-14 09:25:17
【问题描述】:
在将 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的时候才会调用,对吧?
所以我的问题是:即使在我的叠加层已经在地图上渲染之后,是否有可能更改和设置此 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,隐藏它,显示另一个,隐藏它等等......
【问题讨论】:
标签: ios objective-c mapkit alpha mktileoverlay