Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Cocoa绘图错误:";无效的上下文0x0“;_Macos_Swift_Cocoa_Drawing_Nsbezierpath - Fatal编程技术网

Macos Cocoa绘图错误:";无效的上下文0x0“;

Macos Cocoa绘图错误:";无效的上下文0x0“;,macos,swift,cocoa,drawing,nsbezierpath,Macos,Swift,Cocoa,Drawing,Nsbezierpath,我试图在我的视窗上画一些漂亮的正方形,但是我得到了一些奇怪的错误。我做错什么了吗 代码如下: import Foundation import AppKit public class MyWindowView: NSView { private func drawARectAtPoint(point: NSPoint) { let rectToDraw:NSRect = NSMakeRect(point.x, point.y, 200, 200) NSColor.blackC

我试图在我的视窗上画一些漂亮的正方形,但是我得到了一些奇怪的错误。我做错什么了吗

代码如下:

import Foundation
import AppKit

public class MyWindowView: NSView {

private func drawARectAtPoint(point: NSPoint) {
    let rectToDraw:NSRect = NSMakeRect(point.x, point.y, 200, 200)
    NSColor.blackColor().setStroke()
    var bezier = NSBezierPath(rect: rectToDraw)
    bezier.lineWidth = 2
    bezier.stroke()
}

override public func mouseDown(theEvent: NSEvent) {
    let clickPoint = theEvent.locationInWindow;
    self.drawARectAtPoint(clickPoint)
}
}
我将窗口内容视图的类设置为MyWindowView,当我单击该类时,会出现如下错误:

Oct 21 14:57:21 ImageCI[3467]:CGContextSetStrokeColorWithColor:无效上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_backtrace环境变量。 Oct 21 14:57:21 ImagineCI[3467]:CGContextSaveGState:无效的上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_backtrace环境变量。
Oct 21 14:57:21 ImagineCI[3467]:CGContextSetLineCap:无效上下文0x0。如果要查看回溯,请设置CG_CONTEXT_SHOW_backtrace环境变量。

是的,您需要绘制一个上下文。最佳实践可能是覆盖子类的
drawRect
方法,其中上下文已自动为您设置,类似于:

import Foundation
import AppKit

public class MyWindowView: NSView {

    private func drawARectAtPoint(point: NSPoint) {
        let rectToDraw:NSRect = NSMakeRect(point.x, point.y, 200, 200)
        NSColor.blackColor().setStroke()
        var bezier = NSBezierPath(rect: rectToDraw)
        bezier.lineWidth = 2
        bezier.stroke()
    }

    private var clickPoint: NSPoint?

    override public func mouseDown(theEvent: NSEvent) {
        clickPoint = theEvent.locationInWindow
        setNeedsDisplayInRect(bounds)
    }

    override public func drawRect(dirtyRect: NSRect) {
        // do all your drawing here
        if let clickPoint = clickPoint {
            drawARectAtPoint(clickPoint)
        }
    }
}

不客气!别忘了接受我的回答,谢谢:)