我尝试使用MKOverlayRenderer在地图上渲染文字。我有一个现有的,功能齐全的MKOverlayRenderer渲染一组点,所以我唯一的问题是为&#39 ;-(void)drawMapRect中的每个点渲染一段文字:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext: (CGContextRef)上下文'功能
我通过SO和Google找到的所有解决方案都使用注释或UILabels。但我想让文本绘图代码与渲染点的代码位于同一位置。此外,还有大约10,000个点,但我确保它不会通过缩放和边界检查同时渲染它们。我有理由相信我不想用其他解决方案创建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问题,很抱歉,如果它不正确。
编辑:我只是在我可以进行放大时看到了文字,因此我意识到我还没有考虑缩放比例。假设我需要在渲染之前进行缩放变换以考虑它。 Haven目前没有解决它,但我想我正在路上。
答案 0 :(得分: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 功能的情况下继续这样做,我仍然很想知道。