0

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

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

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

现在,我想知道如果我合并我的项目,viewForOverlay 委托函数应该是什么样子?

对于我的图像(平铺)覆盖,我目前看起来像这样:

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

对于我的路线 Overlay,它看起来像这样:

- (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?
}
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 回答