MKPolyline 的问题

Posted

技术标签:

【中文标题】MKPolyline 的问题【英文标题】:Issues with MKPolyline 【发布时间】:2013-09-01 22:00:45 【问题描述】:

我是 Xcode 的新手,在使用折线跟踪用户路径时遇到问题。

我正在正确获取位置。我能够正确添加引脚。但是,我的折线方法永远不会被调用。

下面是我的代码。

在头文件中...

@interface Tracker : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>

    MKMapView *mapView;
    //other declarations

在实现文件中,我有以下代码。我在didUpdateLocations方法里面调用drawPolyline方法,调用正确。

- (void) drawPolyline:(NSArray *)locations

    NSInteger numberOfLocations = [locations count];
    if (numberOfLocations > 1)
    
        CLLocationCoordinate2D *locationCoordinate2DArray = malloc(numberOfLocations * sizeof(CLLocationCoordinate2D));
        for (int i = 0; i < numberOfLocations; i++)
        
            CLLocation* current = [locations objectAtIndex:i];
            locationCoordinate2DArray[i] = current.coordinate;
        

        self.polyline = [MKPolyline polylineWithCoordinates:locationCoordinate2DArray count:numberOfLocations];
        free(locationCoordinate2DArray);

        [mapView addOverlay:self.polyline];
        [mapView setNeedsDisplay];
    


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

    MKPolylineView* polyLineView = [[MKPolylineView alloc] initWithPolyline:self.polyline];
    polyLineView.strokeColor = [UIColor blueColor];
    polyLineView.lineWidth = 2;
    return polyLineView;

我们非常感谢您的帮助。提前致谢。

【问题讨论】:

【参考方案1】:

mapView:viewForOverlay: 是一个委托方法,因此您需要在某处设置地图视图的委托。否则,将永远不会调用委托方法。

[mapView setDelegate:self];

【讨论】:

感谢您的回复。真正的问题是我的逻辑 - 如果(numberOfLocations > 1)。看起来 numberOfLocations 只有在我移动至少 200 英尺时才会增加。我评论了那条线,现在 viewForOverlay 被调用了。但是,性能很差。地图闪烁。我可以通过使用 MKPointAnnotation 来避免这个问题。然而,这给了我一个别针。有没有办法用点或其他图像替换图钉? 您可以自己创建一个点图像并返回它。以 Apple 的 MapCallouts 示例代码为例。

以上是关于MKPolyline 的问题的主要内容,如果未能解决你的问题,请参考以下文章

MKPolyLine,检测线条何时重叠并相应改变颜色

添加 MKPolyLine NSInvalidArgumentException

将 MKTileOverlay 与 MKPolyLine 一起使用

在 MKPolyLine 视图中绘制渐变

与 MapKit 中的缩放相关的 MKPolyline 奇怪渲染

MapKit:添加 MKPolyline 隐藏 MKTileOverlay