我正在尝试显示条形图视图,但每次包含它的NSView调整大小时,标签都不会被删除或调整大小并显示类似的内容:bar chart我使用带边框的标签来简化查看。我所谈论的标签是水平轴上的标签。
问题是我在NSView子类内的override func drawRect(rect:NSRect){}
上添加了标签。我把标签放在那里,因为当视图调整大小时,标签会跟随条形图并更改其大小并且运行良好,但是创建新标签而不是重新绘制标签。
我该如何解决这个问题?
我在override func drawRect(rect:NSRect){}
内部有一个for循环,调用此函数12次:
var label = NSTextField()
private func showLabel (valor: String, frame: CGRect) -> NSTextField {
label = NSTextField(frame: frame)
label.stringValue = valor
label.textColor = NSColor.blueColor()
label.editable = false
label.bordered = true
label.alignment = .Center
let fontSize = label.font!.pointSize;
label.font = NSFont(name: "Arial", size: fontSize)
return label
}
这里是drawRect方法
override func drawRect(rect:NSRect){
removeLabel()
let pathRect = NSInsetRect(self.bounds, 1, 1)
let path = NSBezierPath(rect: pathRect)
path.lineWidth = 1
NSColor.whiteColor().setFill()
NSColor.blackColor().setStroke()
path.fill()
path.stroke()
eixosDrawing()
// Bars
barresDrawing()
// Eixos
eixosHoritzontals()
}
调用标签函数的函数
// Creating the Labels
func eixosHoritzontals () {
let drawingRect = elDrawRect()
let arrayY = dataSource?.infoGraficsView(self) ?? [1,2,3,4,5,6,7,8,9,10,11,12]
let arrayX = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
let (espaiUnaBarra, espaiUnaSeparacio) = propBarres (CGFloat(arrayY.count))
for i in 0..<arrayY.count {
let posicioX = CGRectGetMinX(drawingRect) + (espaiUnaSeparacio + espaiUnaBarra) * CGFloat(i) + espaiUnaSeparacio + espaiUnaBarra / 2
let posicioY = CGRectGetMinY(drawingRect) - (self.bounds.size.height * 0.15) / 4
let centre = CGPoint( x: posicioX, y: posicioY )
let size = CGSize(width: espaiUnaBarra + espaiUnaSeparacio * 3/2, height: self.bounds.height * 0.15 / 4 )
let rectu = CGRect(center: centre, size: size)
// Adding
let text = showLabel(String(arrayX[i]), frame: rectu)
self.addSubview(text)
}
}
答案 0 :(得分:0)
我终于通过使用它解决了我的问题:
for subview in self.subviews { // which self is the NSView subclass created by myself
if subview is NSLabel {
subview.removeFromSuperview() // delete all the labels added no matter how many of them are there.
}
}
我希望它可以帮助别人!