在swift中以编程方式清除NSView

时间:2015-01-31 05:21:37

标签: macos cocoa swift drawing 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
    }
}

现在我需要编写一个函数来完全清除该视图。

3 个答案:

答案 0 :(得分:1)

通过完全清除视图不太清楚你的意思,但是你不能用纯色填充它吗?

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

(尚未达到Swift的热度)

<强>更新 我改进了我的Swift印章!

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

答案 1 :(得分:0)

这样的事情应该足够了。我在我的项目中使用了类似的东西来清除NSView。

while curView.subviews.count > 0 {
   curView.subviews.last?.removeFromSuperview()
}

答案 2 :(得分:0)

Swift 4.2 解决方案:

myView.subviews.removeAll()