MacOS不显示NSBezierPath行

时间:2018-08-05 13:19:23

标签: swift macos nsbezierpath

我正在MacOS应用程序中画一条线,但看不到这条线。有什么问题吗?

我的代码如下:

func addLine() {
    let path = NSBezierPath()
    path.move(to: NSPoint(x: 100.0, y: 100))
    path.line(to: NSPoint(x: 200.0, y: 200.0))
    NSColor.green.setFill()
    NSColor.green.setStroke()
    path.close()
    path.stroke()
}

我叫它:

override func viewDidLoad() {
    super.viewDidLoad()

    addLine()
}

我做错什么了吗?我只是在窗口中什么都看不到。

1 个答案:

答案 0 :(得分:1)

您是否创建了自己的NSView子类?

如果我创建一个新视图并像这样添加您的代码:

import Cocoa

class MyView: NSView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        addLine()
    }

    func addLine() {
        let path = NSBezierPath()
        path.move(to: NSPoint(x: 100.0, y: 100))
        path.line(to: NSPoint(x: 200.0, y: 200.0))
        NSColor.green.setFill()
        NSColor.green.setStroke()
        path.close()
        path.stroke()
    }
}

然后,我-在情节提要中,将“自定义视图”拖到画布上,将视图的类型更改为MyViewstoryboard setup

然后我在运行该应用程序时看到了这一点:

tada

如果您希望在代码中添加视图,则可以执行以下操作:

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let myView = MyView()
        myView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(myView)
        myView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        myView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        myView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        myView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    }
}

因此,您的代码似乎可以正常工作,我不确定您是如何尝试使用它的。

希望给您带来继续的机会。