【问题标题】:MacOS does not display NSBezierPath lineMacOS 不显示 NSBezierPath 行
【发布时间】:2018-08-05 22:07:27
【问题描述】:

我试图在我的 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()
}

我做错了吗?我只是在我的窗口中看不到任何东西。

【问题讨论】:

  • view.layer.path = 路径
  • @SWAT view.layer 没有路径属性

标签: swift macos nsbezierpath


【解决方案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()
    }
}

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

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

如果你喜欢在代码中添加视图,你可以这样做:

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

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

希望这能让你继续努力。

【讨论】:

  • 有没有办法在不创建 NSView 类的情况下做到这一点?就在我的 NSViewController 中
  • @J.Doe 你可能可以,我尝试了一些东西......但没有运气。我认为问题在于NSViewControllers 和你在这里尝试做的“低级绘图”在技术堆栈中的两个不同级别上工作,如果这有意义的话。 NSViewControllers 用于快速布置视图并填充它(通过@IBOutlets),处理用户输入(@IBAction)等等。而绘图更“低级”,需要您更接近金属。如果你看够长,你可能会找到知道如何结合这两个“世界”的人,但我不知道如何,抱歉:(
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-29
相关资源
最近更新 更多