0

2 つの異なるオーバーレイを持つ MKMapView が必要です。

まず、「マップ上のイメージ オーバーレイ」(TileOverlay) があり、次にマップ上にオーバーレイとしてルートを描画したいと考えています。

この作業を 2 つの異なるプロジェクトで行うと、すべて正常に動作します (1 つはイメージ オーバーレイを使用し、もう 1 つはルート オーバーレイを使用)。

ここで、プロジェクトをマージした場合、viewForOverlay デリゲート関数はどのように見えるべきか疑問に思っています。

私の画像(タイル)オーバーレイの場合、現在、次のようになっています。

- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{    
    TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
    tileView.tileAlpha = 1.0;
    return tileView;
}

私のルートオーバーレイでは、次のようになります。

- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
    polylineView.lineJoin = kCGLineJoinRound;
    polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
    return polylineView;
}

これらを (1 つのプロジェクトに) 「マージ」したい場合、このメソッドはどのように見えるでしょうか?

 - (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{
    //what comes here?
}
4

1 に答える 1

4

mapView:viewForOverlay:次のように、まずメソッドに渡されたオーバーレイのタイプを確認することで、この状況に対処できます。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {

    if ([overlay isKindOfClass:[MKPolyline class]]) {   

        MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
        polylineView.lineJoin = kCGLineJoinRound;
        polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
        return polylineView;

    } else {

        TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
        tileView.tileAlpha = 1.0;
        return tileView;
    }
于 2012-06-23T15:19:13.117 に答える