我正在尝试在MKMapView上绘制一些包含文本的圆形叠加层。
我将MKCircleView子类化,在其中放入了以下内容(基于this),但未显示该文本。圆圈正确显示。 (也尝试了第一个响应的解决方案,结果相同)。
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
NSString * t= @"XXXXX\nXXXX" ;
UIGraphicsPushContext(context);
CGContextSaveGState(context);
[[UIColor redColor] set];
CGRect overallCGRect = [self rectForMapRect:[self.overlay boundingMapRect]];
NSLog(@"MKC : %lf, %lf ----> %lf , %lf ", mapRect.origin.x ,mapRect.origin.y , overallCGRect.origin.x, overallCGRect.origin.y);
[t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial" size:10.0] lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
CGContextRestoreGState(context);
UIGraphicsPopContext();
}
调试时,我会得到像这样的值
MKC : 43253760.000000, 104071168.000000 ----> 1.776503 , 1.999245
MKC : 43253760.000000, 104071168.000000 ----> -1.562442 , -2.043090
他们正常吗?我想念什么?
谢谢。
最佳答案
我相信您的代码可以正常工作,问题在于文本没有正确缩放,使其不可见。
使用zoomScale
函数根据MKRoadWidthAtZoomScale
缩放字体大小:
[t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial"
size:(10.0 * MKRoadWidthAtZoomScale(zoomScale))]
lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
另外,请确保使用与基础圆的颜色不同的文本颜色。
请注意,使用
drawInRect
将导致文本限于圆内,并且可能会被截断。如果要始终显示所有文本,则可以改用drawAtPoint
。