【问题标题】:Add a text above the triangle CAShapeLayer在三角形 CAShapeLayer 上方添加文本
【发布时间】:2020-11-03 00:07:36
【问题描述】:

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

   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 坐标在此三角形上方或下方添加文本/标签。

非常感谢您的帮助。

【问题讨论】:

标签: swift uibezierpath cashapelayer


【解决方案1】:

要在三角形下方添加标签,您只需在零原点处以零大小创建它,选择字体大小,将文本对齐设置为居中并调用 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 = "StackOverFlow"
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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多