0

NSImageView に NSBezierPath ラインを描画しています。NSBezierPath オブジェクト、 setting moveToPoint、 setting lineToPoint、 settingを作成しています。setLineWidth:その後drawRectNSImageViewサブクラスで を呼び出して[myNSBezierPath stroke]います。それはすべて思い通りに機能しますが、メソッドを使用できないようですcontainsPoint:...実装してみました

if([myNSBezierPath containsPoint:[theEvent locationInWindow]]{
   //do something
}

-(void)mouseUp:(NSEvent*)theEvent私の NSImageView サブクラスの中にありますが、反応することはなく、その行にヒットしていると確信しています...何か間違っていますか? NSBezierPath がクリックされているかどうかを検出する必要があるだけです。

乾杯。

4

1 に答える 1

1

マウスのクリック位置を、ウィンドウの座標系ではなく、イメージ ビュー サブクラスの座標系に変換してください (同じでない限り)。ベジエ パスは、それが描画されるオフセットについて認識していないため、ヒット テストを実行するときはそれを考慮する必要があります。

また、containsPoint:ドキュメントから:

このメソッドは、パス自体とそれが囲む領域に対してポイントをチェックします。囲まれた領域でのヒットを決定するとき、このメソッドは非ゼロのワインディング ルール (NSNonZeroWindingRule) を使用します。パスのストロークに使用される線幅は考慮されません。

鉱山を強調します。

于 2013-09-01T05:53:25.683 に答える