MKOverlayRenderer がマップに渡された後、そのアルファ プロパティにアクセスして変更するにはどうすればよいですか?
実際、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 に追加したときにのみ呼び出されますよね?
だから私の質問は:オーバーレイがマップ上に既にレンダリングされた後でも、このアルファ属性の値を変更および設定する可能性がある方法はありますか?
レンダラーを 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];
}
これを行うためのより良い方法はありますか? アルファ値を設定するだけで、ちょっと遅いプロセスのようです。
実際には、OverlayRenderer のアルファ値を 0 から 1 に動的に切り替えて、1 つのオーバーレイを表示したり、非表示にしたり、別のオーバーレイを表示したり、非表示にしたりしたいと考えています。