Çubuk grafik görünümü görüntülemeye çalışıyorum, ancak bunu içeren NSView her yeniden boyutlandırıldığında, etiketler silinmez veya yeniden boyutlandırılmaz ve böyle bir şey gösterir: bar chart Görmeyi kolaylaştırmak için kenarlıklı etiketler kullandım. Konuştuğum etiketler yatay eksende olanlar.NSView'ın yeniden çizilmesini mümkün kılmak için bir etiketi nasıl yeniden boyutlandırabilir veya silebilirim?
Sorun şu ki, override func drawRect(rect:NSRect){}
etiketlerini NSView alt sınıfının içine ekliyorum. Etiketleri oraya koydum çünkü görünüm etiketleri yeniden boyutlandırdığında çubuk grafiğini takip ediyor, boyutunu değiştiriyor ve iyi çalışıyor ancak yeniden etiketlemek yerine yeni etiketler oluşturuyor. Bu sorunu nasıl düzeltebilirim?
override func drawRect(rect:NSRect){}
iç döngü için var: Burada
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
}
etiket işlevini çağırır drawRect yöntemi
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()
}
Ve işlev
// 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)
}
}