2014-10-07 53 views
0

我试图在使用MKOverlayRenderer的地图上绘制文本。我有一个现有的,功能强大的MKOverlayRenderer呈现一组点,所以我唯一的问题就是为' - (void)drawMapRect:(MKMapRect)中的每个点渲染一段文本mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)上下文“功能。使用MKOverlayRenderer绘制文本

我通过SO和Google发现的所有解决方案均使用注释或UILabels。但是我想让文本绘图代码与渲染点的代码位于同一位置。也有大约10000点,虽然我确保它不是在同一时间通过缩放和边界检查来渲染它们。我确信我不想用其他解决方案创建10,000个对象。

这是当前的测试代码,我必须尝试渲染“文本文本”项目之一。它是我在网上找到的一些方法的组合,用于呈现某些东西。

CGPoint* point = self.pointList.pointArray + pointIndex; 
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSelectFont(context, "Helvetica", 20.f, kCGEncodingFontSpecific); 
CGContextSetTextDrawingMode(context, kCGTextFill); 
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0); 
CGContextSetTextMatrix(context, xform); 
CGContextShowTextAtPoint(context, point->x, point->y, "Test Text 1", 11); 
CGContextShowTextAtPoint(context, 10, 10, "Test Text 2", 11); 
CGContextShowText(context, "Test Text 4", 11); 
UIFont* font = [UIFont fontWithName:@"Helvetica" size:12.0]; 
[@"Test Text 3" drawAtPoint:*point withFont:font]; 

这是我的第一个SO问题,所以对不起,如果它不是正确的。

编辑:我刚看到放大的文字,只要我可以去,所以意识到我没有计算缩放比例。假设我需要在渲染之前进行缩放转换来解决它。目前还没有解决,但我想我正在路上。

回答

1

我已经解决了。对不起,发布这个,但我在我的智慧结束,并认为我需要帮助。

,提炼线为:

CGContextShowTextAtPoint(context, point->x, point->y, "Test Text 1", 11); 

这是一个过时的功能,但我不知道任何其他方式来呈现到一个特定的背景。

为了解决这个问题,仿射变换成了:

CGAffineTransform xform = CGAffineTransformMake(1.0/zoomScale, 0.0, 0.0, -1.0/zoomScale, 0.0, 0.0); 

其他错误是,“选择字体”调用所需成为:

CGContextSelectFont(context, "Helvetica", 12.f, kCGEncodingMacRoman); 

我已经从一些复制的其他编码我在网上看过的示例代码,但它导致文本有错误的字符。

如果仍然有办法,我可以不使用已弃用的CGContextShowTextAtPoint函数我仍然很想知道。