ios - 使用 MKOverlayRenderer 绘制文本

标签 ios mkmapview

我正在尝试使用 MKOverlayRenderer 在 map 上呈现文本。我有一个现有的功能性 MKOverlayRenderer 渲染一组点,所以我唯一的问题是为 '-(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];

这是我的第一个问题,如果不正确,很抱歉。

编辑:我刚刚在尽可能放大时看到了文本,所以意识到我没有考虑缩放比例。假设我需要在渲染之前进行缩放变换来解释它。目前尚未解决,但我想我已经在路上了。

最佳答案

我已经解决了。很抱歉发布此信息,但我已无计可施,认为我需要帮助。

呈现的行是:

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 函数的情况下做到这一点,我仍然很想知道。

关于ios - 使用 MKOverlayRenderer 绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227019/

相关文章:

swift - didSelect 只为同一个 pin 触发一次

iphone - 我可以在我的 AppDelegate 中接收摇动事件吗?

ios - 使用类似于 Iphone 音乐播放器的表格 View 创建选项卡式 View

ios - 将 UIImage 调整为 100% 并裁剪

iOS 7- MKCircleRenderer 没有被绘制?

iphone - 如何在适用于 IOS 6 的 Google map API 中使用委托(delegate)

iphone - map View 上的用户可移动点?

ios - 基于 TCP 的客户端通信在 iOS 11 中不起作用?

ios - UILabel 文字颜色浅

ios - 为什么我的注释没有出现在我的 map View 中?