Ich versuche, eine Balkendiagrammansicht anzuzeigen, aber jedes Mal, dass das NSView, das es enthält, die Größenänderungen nicht gelöscht oder die Größe geändert und zeigt etwa Folgendes: bar chart Ich verwendete umrandete Beschriftungen, um es einfach zu sehen. Die Etiketten, von denen ich spreche, sind die in der horizontalen Achse.Wie kann ich die Größe eines Labels ändern oder löschen, um das Neuzeichnen des NSView zu ermöglichen?
Das Problem ist, dass ich die Etiketten auf override func drawRect(rect:NSRect){}
innerhalb der NSView-Unterklasse hinzufügen. Ich lege die Beschriftungen dort hin, denn wenn die Größe der Ansicht geändert wird, folgen die Beschriftungen dem Balkendiagramm, ändern ihre Größe und funktionieren gut, erstellen aber neue Beschriftungen, anstatt sie neu zu zeichnen. Wie kann ich das Problem beheben?
Ich habe eine for-Schleife innerhalb override func drawRect(rect:NSRect){}
, die diese Funktion 12 Mal anrufen:
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
}
Hier ist die drawRect Methode
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()
}
Und die Funktion, die die Bezeichnung Funktion
// 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)
}
}
ruft