私はNSCollectionView
をサブクラス化し、マウスダウンイベントとマウスイベントを聞きました。コレクションビューの中でマウスをクリックするたびに線を描きたい。NSCollectionViewの内部でbezierPathを描画する方法は?
これは私の描画コードブロックです。私はdraw(_ dirtyRect: NSRect)
でこのメソッドを呼び出すNSCollectionView
サブクラスの中
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()
}
時にアプリをロードアップ、それは正しく行を示しています。しかし、マウスがクリックされたときにのみ、それは描画するために、私はmouseDown(with event: NSEvent)
メソッドにそれを移動:
override func mouseDown(with event: NSEvent) {
func drawLine()
}
しかし、コレクションビューのIマウスクリックは、私は次のエラーを取得する場合:
: 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
をサブクラス化し、NSView
をaddTrackingArea()
に追加しました。現在選択されているアイテムを渡すデリゲートを設定しました。
私は上記のようなエラーを取得しないようにNSCollectionView
内の私の描画コードを置くべき場所を知る助けを必要としています。
偉大な、ちょうど私が必要な情報。 :) – jyet