5

我试图在叠加视图中的两点之间画一条直线。在 MKOverlayView 方法中,我认为我做得正确,但我不明白为什么它没有画线......

有谁知道为什么?

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale
          inContext:(CGContextRef)context
{
    UIGraphicsPushContext(context);

    MKMapRect theMapRect = [[self overlay] boundingMapRect];
    CGRect theRect = [self rectForMapRect:theMapRect];

    // Clip the context to the bounding rectangle.
    CGContextAddRect(context, theRect);
    CGContextClip(context);

    CGPoint startP = {theMapRect.origin.x, theMapRect.origin.y};
    CGPoint endP = {theMapRect.origin.x + theMapRect.size.width,
        theMapRect.origin.y + theMapRect.size.height};

    CGContextSetLineWidth(context, 3.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, startP.x, startP.y);
    CGContextAddLineToPoint(context, endP.x, endP.y);
    CGContextStrokePath(context);

    UIGraphicsPopContext();
}

感谢您的帮助。

4

1 回答 1

3

正在使用哪些值绘制线startP,但它们使用包含值的值进行初始化。endPCGPointtheMapRectMKMapPoint

相反,使用theRect您从theMapRectusing转换而来的初始化它们rectForMapRect

此外,对于线宽,您可能希望使用该MKRoadWidthAtZoomScale函数对其进行缩放。3.0否则,除非您放大得很近,否则将看不到固定的线宽。

更改后的代码如下所示:

CGPoint startP = {theRect.origin.x, theRect.origin.y};
CGPoint endP = {theRect.origin.x + theRect.size.width,
    theRect.origin.y + theRect.size.height};

CGContextSetLineWidth(context, 3.0 * MKRoadWidthAtZoomScale(zoomScale));


MKOverlayView最后,为什么不使用 aMKPolylineView来避免手动绘制线条 ,而不是 custom ?

于 2012-05-23T02:17:48.560 回答