如何解决在三角形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 = "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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。