开发者

Custom core-graphics overlay within MKMapView: can't display stroked ellipse

开发者 https://www.devze.com 2023-03-25 13:02 出处:网络
I\'m trying to draw a series of concentric circles as a custom overlay within a MKMapView.Please note that for performance reasons, I need to implement a custom draw method, not simply add a series of

I'm trying to draw a series of concentric circles as a custom overlay within a MKMapView. Please note that for performance reasons, I need to implement a custom draw method, not simply add a series of MKCircleViews.

I have the following code, and I have no idea why I can see the circles if they are filled, but when I just try to draw empty circles (i.e. stroke outline only), I see nothing.

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
// draw series of concentric circles

// I have tried all manner of line widths
CGContextSetLineWidth(context, 5.0);

CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor)开发者_如何学C; 

float radius;

for (int i = 1; i < self.numberOfRings+1; i++) {

    //  code to calculate the radius here using i
    // but this is fine, set to 1000 metres
    radius = 1000.0;

    // centre of circles
    CLLocationCoordinate2D centre = {latitude: self.latitude, longitude: self.longitude};

    // create circle of appropriate geographical dimensions
    MKCircle *circle = [MKCircle circleWithCenterCoordinate:centre radius:radius];

    // the next two lines don't work, I don't see anything drawn
    CGContextStrokeEllipseInRect(context, [self rectForMapRect:[circle boundingMapRect]] );
    CGContextStrokePath(context);

    // but the dimensions of the rect are ok, because I see the filled in rect (below) perfectly if I uncomment this next line
    //      CGContextFillEllipseInRect(context, [self rectForMapRect:[circle boundingMapRect]] );

    }
}

Please, what on earth am I supposed to do to get the stroked images to display?


Ahhhh, finally....

The answer is that the line width needs to be set like this prior to drawing:

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

Not sure why this is the case and you can't just set any value for the line width though.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号