Я пытаюсь отобразить представление в виде гистограммы, но каждый раз, когда NSView, который содержит его, меняет размер, метки не удаляются и не изменяются и отображаются примерно так: bar chart Я использовал граничные метки, чтобы упростить их просмотр. Ярлыки, о которых я говорю, это те, которые расположены на горизонтальной оси.Как изменить размер или удалить ярлык, чтобы сделать возможным перерисовку NSView?
Проблема заключается в том, что я добавляю метки на override func drawRect(rect:NSRect){}
внутри подкласса NSView. Я помещал эти метки там, потому что, когда представление меняет размеры, эти метки следуют за гистограммой, меняют ее размер и хорошо работают, но создают новые ярлыки, а не перерисовывают их. Как я могу исправить эту проблему?
У меня есть цикл внутри override func drawRect(rect:NSRect){}
, что вызывать эту функцию в 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)
}
}