2016-03-27 2 views
1

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

Antwort

0

Ich löste mein Problem schließlich mit dem:

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. 
    } 
} 

Ich hoffe, es kann jemandem helfen!

Verwandte Themen