2012-03-20 10 views
1

NSViewのサブクラスでは、-mouseDown:イベントを処理して画面上のクリック位置を取得しています。この位置で、私は-drawRectでrectを描くのに使うポイントを定義しました。うまくいきました。設定時のバグ-setWantsLayer:on Lion

しかし...私がwantLayerを設定すると動作しません。私は入力の位置を取得すると、私はY軸が20ポイントの増加を見て、私は何が起こっているのか分からない...誰も説明することができますか?どのように私はこの問題を解決する?

シミュレーション:

のx座標で私をクリック:100; y:100; drawRectはx:100にrectを描画します。 y:100;それは大丈夫です、私が欲しいものです。 setWantsLayerで

:YES

のx座標で私をクリック:100; y:100; drawRectはx:100にrectを描画します。 y:120; (またはこのようなもの)

可能です-setWantsLayerを設定せずにCALayersを使用することはできますか?私はこれを理解しようとしていますが、何が起こっているのか分かりません...あなたの助けが必要です。

更新:私はこれを理解しようとしています...今度は多くのテストを行いました... 問題は-mouseDown:NSViewから、私が-setWantsLayerをYESに設定したときもう期待どおりに動作します...

私は自分のウィンドウにCustomViewを持ち、NSViewのサブクラスを作成してCustomViewクラスとして設定しました。 CustomViewは、位置(0、20)にあります。座標の向きは反転しません。

私は、NSViewがレイヤーを望んでいると思います。-mouseDown:(0、0)の代わりにフレームを位置(0、0)(つまりNSWindowフレームを取得します)に更新します。 -mouseDownからすべての位置が発生すると、Y軸上に20ポイント増加します。私が言っていることが正しいかどうかはわかりませんが、私がテストの結果として得ている事実です。

誰かがこれを理解するのに役立つでしょうか?

答えて

1

mikeashの助けを借りて(#macdev @ frenoode)私はこの問題を解決しました。

問題は、ポイントリターンを-mouseDown:eventからどのように変換していたかです。私は-convertPointFromBackingを使用していました:そして、mikeashのように: "問題は-convertPointFromBacking:locationInWindowから返されたポイントを変換するためには正しくない"ということです。 msgstr "locationInWindowはピクセル整列バッキングストア座標系 ''にありません。"

-convertPoint:fromView:like:[送信者convertPoint:[mEvent locationInWindow] fromView:nil]に変更されました。それは素晴らしい仕事です!

mikeashさんありがとうございます。

そして、同じ質問で他の人を助けるためにここに回答を投稿しています。

関連する問題