objective-c - 如何在 NSCollectionView 中绘制 bezierPath?

标签 objective-c swift cocoa

我已将 NSCollectionView 子类化以监听鼠标按下和鼠标事件。每当在 Collection View 中单击鼠标时,我想画一条线。

这是我的绘图代码块。

 public  func drawLine() {

    //// Bezier Drawing
    let bezierPath = NSBezierPath()
    bezierPath.move(to: NSMakePoint(50.0, 60.0))
    bezierPath.line(to: NSMakePoint(65.5, 72.5))
    bezierPath.line(to: NSMakePoint(65.5, 93.5))
    bezierPath.line(to: NSMakePoint(97.5, 87.5))
    bezierPath.line(to: NSMakePoint(97.5, 56.5))
    NSColor.black.setStroke()
    bezierPath.lineWidth = 10
    bezierPath.stroke()
}

NSCollectionView 子类中,我在 draw(_ dirtyRect: NSRect) 中调用了这个方法,它在应用程序加载时正确显示了线条。但是为了使其仅在单击鼠标时绘制,我将其移动到 mouseDown(with event: NSEvent) 方法:

override func mouseDown(with event: NSEvent) {
    func drawLine()
}

但是当我用鼠标点击 Collection View 时,出现以下错误:

: CGContextSetStrokeColorWithColor: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. : CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

我的目标是在鼠标点击时从 collectionViewItem 的中心画一条线到另一个项目,因为我已经将 NSCollectionViewItem 子类化并添加了一个自定义 NSViewaddTrackingArea ()。我已经设置了一个传递当前所选项目的委托(delegate)。

我需要帮助来了解我应该将我的绘图代码放在 NSCollectionView 中的什么位置,以免出现上述错误。

最佳答案

是的,

你不能这样做。

你要做的是:

  • 在您的类中添加一个 bool 值,您将在 mouseDown: 中将其传递给 true,在 mouseUp 中传递给 false :

  • 在您的 draw: 方法中,检查该 bool 值以了解您是否要画线

  • mouseUp:mouseDown: 中,设置 bool 值后,调用 self.setNeedDisplay()(这将准备一个上下文并自动调用绘图。)

要点是:您不能自己调用​​ draw:。绘图时,您是在图形上下文中绘图,它必须为您布置。

关于objective-c - 如何在 NSCollectionView 中绘制 bezierPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38941824/

相关文章:

ios - 重置 View 层次结构 iOS

iphone - Obj-C,如何删除之前设置的本地推送通知?

iOS QOS_CLASS_USER_INITIATED 在与 UI 交互时卡住 (Swift)

ios - 从 Swift 转换为 Objective-c 的工具

ios - 如果我在未安装 iBooks 的情况下尝试通过我的应用程序在 iBooks 中打开 pdf,会发生什么情况?

objective-c - UIScrollView 中按钮的中心行

iphone - 在 UIScrollView 中添加项目

swift - 如何在我的 swift playground 中包含包含数字表的文件

swift - 使用 PDFKit 提取 PDF 高亮显示

iphone - 在 iPad 中制作网格像素编辑器