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.
精彩评论