0

ここでマップタイプを選択することに基づいてマップオーバーレイアルファを変更できるかどうかを知りたいのですが、うまくいくと思っていたコードですが、うまくいかないようです。誰かが扇動を提供できますか?

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay{
TileOverlayView *view = [[TileOverlayView alloc] initWithOverlay:overlay];
if(mapview.mapType == MKMapTypeHybrid) {
    view.tileAlpha = 0.55;
} else if(mapview.mapType == MKMapTypeSatellite) {
    view.tileAlpha = 0.0;
} else {
    view.tileAlpha = 0.75;
}
return [view autorelease];
}
4

1 に答える 1

0

このコードは正常に機能します

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    MKCircleView *circleView = [[MKCircleView alloc] initWithCircle:overlay];

    CGFloat alpha;

    if (mapView.mapType == MKMapTypeStandard) {
        alpha = 0.5f;
    } else {
        alpha = 1.0f;
    }

    circleView.fillColor = [[UIColor blackColor] colorWithAlphaComponent:alpha];

    return circleView;
}

ただし、mapView:viewForOverlayでは、現在のマップタイプに基づいてアルファを設定します。マップがマップタイプを変更するときにアルファを変更するには、KVOを使用してmapTypeプロパティを監視する必要があります。したがって、マップタイプが変更されている場合は、すべてのオーバーレイに新しいアルファを設定するだけです。オーバーレイを使用するためのビューを取得するには

[mapView viewForOverlay:(id<MKOverlay>)overlay];
于 2012-10-29T10:02:30.980 に答える