2015-01-31 3 views
0

У меня есть NSView, подключенный к пользовательскому классу.
Там какая-то рисунок на этой точке зрения:Ясный NSView программно в быстром

class LineDrawer: NSView { 
    var linear = NSBezierPath() 
    var storage = NSUserDefaults.standardUserDefaults() 

    override func drawRect(dirtyRect: NSRect) { 
     var color = NSColor() 

     if let newLoadedData = storage.objectForKey("color") as? NSData { 
      if let currentColor = NSUnarchiver.unarchiveObjectWithData(newLoadedData) as? NSColor { 
       color = currentColor 
      } 
     } 

     color.set() 
     linear.lineWidth = CGFloat(storage.integerForKey("width")) 
     linear.stroke() 
    } 

    override func mouseDown(theEvent: NSEvent) { 
     super.mouseDown(theEvent) 
     let location = theEvent.locationInWindow 
     var lastPt = theEvent.locationInWindow 
     lastPt.y -= frame.origin.y 
     linear.moveToPoint(lastPt) 
    } 

    override func mouseDragged(theEvent: NSEvent) { 
     super.mouseDragged(theEvent) 
     var newPt = theEvent.locationInWindow 
     newPt.y -= frame.origin.y 
     linear.lineToPoint(newPt) 
     needsDisplay = true 
    } 
} 

И теперь мне нужно написать функцию совершенно ясно, что точки зрения.

ответ

1

Не слишком уверен, что вы имеете в виду, полностью очистив этот вид, но не можете ли вы просто заполнить его сплошным цветом?

[[NSColor windowBackgroundColor] setFill]; 
NSRectFill(self.bounds); 

(не до скорости с Swift жаркости пока)

обновление Я совершенствую свои Swift отбивные вот!

NSColor.windowBackgroundColor().setFill() 
NSRectFill(self.bounds) 
+0

Спасибо, я искал способ удалить чертеж, но это тоже будет хорошо. –

+0

Да, вы не можете удалить рисунок после его применения. Альтернативой является установка флага на ваших классах, который включает или выключает конкретный чертеж и указывает представление на «setNeedsDisplay: YES». При следующем проходе через представление будет пусто, и если никакого дополнительного чертежа не потребуется, это не будет сделано. Это более эффективно, чем рисовать каждый раз, а затем стирает его с помощью прямоугольной заливки. –

0

Что-то вроде этого должно быть достаточно. В моем проекте я использовал что-то вроде этого, чтобы очистить NSView.

while curView.subviews.count > 0 { 
    curView.subviews.last?.removeFromSuperview() 
} 
Смежные вопросы