gpt4 book ai didi

macos - cocoa 绘图错误 : "invalid context 0x0"

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:21 25 4
gpt4 key购买 nike

我试图在我的窗口 View 上绘制一些可爱的方 block ,但我遇到了一些奇怪的错误。我做错了什么吗?

代码如下:

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

我将我的窗口内容 View 的类设置为 MyWindowView,当我点击它时,我得到如下错误:

10 月 21 日 14:57:21 ImagineCI[3467]:CGContextSetStrokeColorWithColor:无效上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。10 月 21 日 14:57:21 ImagineCI[3467]:CGContextSaveGState:无效上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。10 月 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)
}
}
}

关于macos - cocoa 绘图错误 : "invalid context 0x0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com