在三角形 CAShapeLayer 上方添加文本

Add a text above the triangle CAShapeLayer

我用这个函数画了一个三角形

   func drawTriangle(size: CGFloat, x: CGFloat, y: CGFloat, up:Bool) {

       let triangleLayer = CAShapeLayer()
       let trianglePath = UIBezierPath()
       trianglePath.move(to: .zero)
       trianglePath.addLine(to: CGPoint(x: -size, y: up ? size : -size))
       trianglePath.addLine(to: CGPoint(x: size, y: up ? size : -size))
       trianglePath.close()
       triangleLayer.path = trianglePath.cgPath
       triangleLayer.fillColor = UIColor.white.cgColor
       triangleLayer.anchorPoint = .zero
       triangleLayer.position = CGPoint(x: x, y: y)
       triangleLayer.name = "triangle"
       layer.addSublayer(triangleLayer)
   }

并称它为:

   drawTriangle(size: 10, x: frame.minX + 45, y: 40, up: false)

我如何修改此函数以使用相同的 x 和 y 坐标在此三角形上方或下方添加文本/标签。

非常感谢您的帮助。

要在三角形下方添加标签,您只需在零原点以零大小创建它,选择字体大小,将文本对齐设置为居中并调用 sizeToFit。然后,您需要做的就是将标签的中心设置在您传递给 drawTriangle 方法的同一点,但将标签高度的一半添加到 y 值。要将其添加到三角形上方,您需要减去。标签高度的一半和三角形的大小。

let x = view.frame.minX + 45
let y: CGFloat = 40
drawTriangle(size: 10, x: x, y: y, up: false)
let label = UILabel(frame: .init(origin: .zero, size: .zero))
label.font = .systemFont(ofSize: 10)
label.textColor = .white
label.text = "Whosebug"
label.backgroundColor = .red
label.textAlignment = .center
label.sizeToFit()
let labelHalfHeight = label.frame.height/2
label.center = .init(x: x, y: y + labelHalfHeight)
view.backgroundColor = .blue
view.addSubview(label)