4

これが私が達成しようとしていることです: 私は現在スキンサポートを追加しようとしているオープンソースの TI 電卓エミュレータに取り組んでいます。スキン イメージは、イメージがスキン イメージに設定された単なる NSImageView です。mouseDown: メソッドをオーバーライドし、convertPointFromBase: を使用して NSImageView 座標でマウスの位置を取得し、locationInWindow の戻り値を変換するポイントとして取得します。

次に、引数が nil の bestRepresentationForDevice: を使用して、NSImageView から基になる NSBitmapImageRep を取得します。最後に、NSBitmapImageRep で getPixel:atX:y を呼び出し、point.x と point.y を場所として指定します。

ただし、NSImageView の原点は (通常どおり) 左下から始まりますが、NSBitmapImageRep の座標は左上から始まります。これを補う明白な方法を見つけられないようです。そのため、ボタン クリックのヒット テストが適切に機能しません。どんな助けでも大歓迎です。

4

2 に答える 2

1

NSImageViewサブクラスでYESを返すためにisFlippedをオーバーライドすることを考えたことはありません。それで問題は解決します。

于 2010-01-22T04:48:22.990 に答える
0

長方形の高さに基づいて y 座標を計算するだけです。

NSPoint pointInFlippedRect(NSPoint inPoint, NSRect aRect)
{
    return NSMakePoint(inPoint.x , NSHeight(aRect) - inPoint.y);
}
于 2010-01-22T04:34:36.717 に答える