gpt4 book ai didi

swift - 在 drawRect MKPolygonRenderer 中写入文本

转载 作者:行者123 更新时间:2023-11-28 08:45:16 26 4
gpt4 key购买 nike

好吧,我已经无计可施了。我是 MapKit 的新手,正在编写一个健康统计应用程序,该应用程序在 MKMapView 上绘制与患者居住地相关的数据。我可以删除注释,并毫无问题地绘制邮政编码区域的多边形。

但是我想在 map 多边形上写文本(而不是注释)。

这是我的代码,我将 MKPolygonRender 子类化以访问 drawRect。

多边形是完美的,但没有文字。我已经尝试写入多边形的第一个点(我最终会找到中心)

卡了几个晚上,真的很感谢。

类 PolygonRender: MKPolygonRenderer { 变量点:CGPoint!

override init(overlay: MKOverlay) {
super.init(overlay: overlay)
}

override func drawMapRect(mapRect: MKMapRect, zoomScale: MKZoomScale, inContext context: CGContext) {


super.drawMapRect(mapRect, zoomScale: zoomScale, inContext: context)
let mapRect:MKMapRect = self.overlay.boundingMapRect
let rect:CGRect = self.rectForMapRect(mapRect)
UIGraphicsPushContext(context)
var bPath = UIBezierPath()
//let polygon:MKPolygon = self.polygon
super.fillColor = UIColor.yellowColor()
let points = self.polygon.points()
let pointCount = self.polygon.pointCount

var point:CGPoint = self.pointForMapPoint(points[0])
bPath.moveToPoint(point)

for var i = 1; i < pointCount; i++ {
point = self.pointForMapPoint(points[i])
bPath.addLineToPoint(point)

}
bPath.closePath()
bPath.addClip()

let roadWidth:CGFloat = MKRoadWidthAtZoomScale(zoomScale)

let attributes: [String: AnyObject] = [
NSForegroundColorAttributeName : UIColor.blackColor(),
NSFontAttributeName : UIFont.systemFontOfSize(5 * roadWidth)]


let centerPoint = pointForMapPoint(points[0])
print(centerPoint)
let string:NSString = "Hello world"
string.drawAtPoint(centerPoint, withAttributes: attributes)




UIGraphicsPopContext()
}

最佳答案

通常你做对了,但我认为字体太小,看不清文本。

尝试将字体大小设置为 100 或更大的值以找出文本在那里,但您需要放大。

例子:

public override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {

let rect:CGRect = self.rect(for: mapRect)

UIGraphicsPushContext(context);

// ...

UIGraphicsPushContext(context);
UIColor.black.setStroke()
context.setLineWidth(1)
context.stroke(rect.insetBy(dx: 0.5, dy: 0.5))

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center

let attributes = [NSAttributedStringKey.paragraphStyle : paragraphStyle,
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 100.0),
NSAttributedStringKey.foregroundColor : UIColor.black]
"\(rect.size)".draw(in: rect, withAttributes: attributes)
UIGraphicsPopContext();
}

下图显示了当矩形大小为 1024x1024 时,字体大小为 100 的文本在 map 上的显示情况

enter image description here

关于swift - 在 drawRect MKPolygonRenderer 中写入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com