如何在委托函数中处理多个MKOverlay

时间:2012-06-23 14:58:33

标签: ios xcode mkoverlay

我想要一个带有两个不同叠加层的MKMapView。

首先,我在地图上有一个“图像叠加”(TileOverlay), 其次,我想在地图上绘制一条路线作为叠加。

如果我在两个不同的项目中执行此操作,一切正常(一个带图像叠加,另一个带路径叠加)

现在,我想知道如果合并我的项目,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;
}

现在,如果我想“合并”这些(合并到一个项目中),这个方法应该怎么样?

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

1 个答案:

答案 0 :(得分: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;
    }