1

MKMapView で一連の MKPolygon を描画しています。それらのいくつかは、互いに重なり合っていました。選択したポリゴンを一番上/前面に移動するにはどうすればよいですか?

bringSubviewToFront:ポリゴンレイヤーから作成した MKPolygonViewを試しました:

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon];

view.strokeColor = [UIColor orangeColor];

[self.mapView bringSubviewToFront:view];

解決:

私は削除しました

MKPolygonView *view = (MKPolygonView *)[self.mapView viewForOverlay:polygon];

view.strokeColor = [UIColor orangeColor];

[self.mapView bringSubviewToFront:view];

Craigが提案したものに置き換えました:

[self.mapView insertOverlay:polygon atIndex:self.mapView.overlays.count];

次に MKMapKit デリゲートmapView:viewForOverlay:を呼び出し、そこで色の変更を処理します。

    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKPolygon class]] && !((MKPolygon *)overlay).isSelected) {
        MKPolygonView*    aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];

        aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
        aView.strokeColor = [UIColor yellowColor];
        aView.lineWidth = 3;

        return aView;
    }
    else if ([overlay isKindOfClass:[MKPolygon class]] && ((MKPolygon *)overlay).isSelected) {
        MKPolygonView*    aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];

        aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
        aView.strokeColor = [UIColor orangeColor];
        aView.lineWidth = 3;

        return aView;
    }
}
4

1 に答える 1

1

オーバーレイを mapView に追加すると、オーバーレイのリスト内のどこに配置するかを選択できます。オーバーレイは一度だけリストに入れることができるので、目的の場所に再度挿入するだけで移動できます。一番上にしたいので、これはうまくいくはずです:

[mapView insertOverlay:overlay atIndex:[mapView.overlays count]];

viewForOverlay を呼び出すべきではありません。そこはiOSにお任せください。オーバーレイに色を付ける必要がある場合は、viewForOverlay 内で行います。これは、iOS が必要なときにいつでもそれを呼び出すことができ、色付けされていないオーバーレイを返す場合はそれが描画されるためです。

于 2013-03-16T09:59:09.183 に答える