【发布时间】:2016-08-14 11:36:11
【问题描述】:
我对@987654321@ 进行了分类以监听鼠标按下和鼠标事件。每当在集合视图中单击鼠标时,我都想画一条线。
这是我的绘图代码块。
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()
}
但是当我在集合视图上单击鼠标时,出现以下错误:
:CGContextSetStrokeColorWithColor:无效的上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。 : CGContextSaveGState: 无效的上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。
我的目标是在鼠标单击时从 collectionViewItem 的中心画线到另一个项目,因为我已将 NSCollectionViewItem 子类化,并将自定义 NSView 添加到 addTrackingArea()。我设置了一个通过当前选定项目的委托。
我需要帮助知道我应该将我的绘图代码放在NSCollectionView 中的哪个位置,以免出现上述错误。
【问题讨论】:
标签: objective-c swift cocoa