2016-03-27 14 views
1

Ç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?

bu fonksiyonu 12 kez diyoruz 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) 

    } 
} 

cevap

0

Sonunda sorunumu kullanarak sorunu çözdüm:

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

Umarım birilerine yardımcı olabilir!

İlgili konular