我使用UIBezierPath和draw(_ rect:CGRect)创建了一个带有自定义三角形的UIView。
我想在CGpoints的三个点中为每个点添加文本标签。
我该怎么做?
class TriangleView: UIView {
override func draw(_ rect: CGRect)
{
color.set()
pathForTriangle().stroke()
}
}
解决方案基于Mathias Quintero的一些答案以及Sulthan的一些建议(三角形点更新时的标签更新):
func addUILabels() {
calculatePoints()
let label1 = UILabel(frame: CGRect(origin: point1, size: CGSize(width: 100, height: 20)))
addSubview(label1)
label1.text = "test"
}
override func draw(_ rect: CGRect)
{
color.set()
pathForTriangle().stroke()
let subViews = self.subviews
for subview in subViews{
subview.removeFromSuperview()
addUILabels()
}
答案 0 :(得分:0)
添加TextLabel不应作为视图内部绘图的一部分。相反,您应该将标签添加为视图的子视图。
addSubview(:)应该可以解决问题。
在正确放置标签时,您必须考虑添加一些约束或手动将标签的框架更改为正确的位置。
您可以而且应该在Swift3中的viewWillLayoutSubviews()或layoutSubviews()中完成所有这些操作