1

ココア タッチの現在の座標は左上隅にあり、0,0 です。私が疑問に思っているのは、0,0が左下隅にあるように「反転」することが可能かどうかということですか?

cocos2d のように 0,0 ポイントが左下隅にあるような調整システムが必要です。ココアタッチでそれを実現することは可能ですか?

4

1 に答える 1

4

「Cocoa」について質問されましたが、実際、Cocoa は長い間、フリップ ビューと非フリップ ビューの明確な違いを示してきました。Cocoa では、単にメソッドをオーバーライドする必要があります。(そして、Cocoa で「反転」とは、Cocoa Touch が行う方法を意味します。Cocoa のデフォルトの「非反転」は、左下の原点です。)

しかし、Cocoa をプログラミングしているわけではありません。Cocoa Touch をプログラミングしています。

したがって、おそらく UIKit から取得したため (UIKit を経由せずに作成した CGContext は反転されません)、反転されたコンテキストがあり、それを反転する必要があります。(または、反転していないコンテキストがあり、それを反転したい場合。)

いずれにせよ、解決策は同じです。

  1. コンテキスト/ビューの高さ全体で上/下 (正の y) に移動します。
  2. y 軸を -1 でスケーリングします。

平行移動は原点を移動します。高さ全体を平行移動すると、原点が反対側のコーナーに移動します。

スケーリングは軸を変更します。y 軸を負の 1 でスケーリングすると反対方向に反転するため、上にあったものが下になり、その逆になります。

これが、コンテキストを左上の起点から左下に、またはその逆にフリップ (またはアンフリップ) する方法です。

動作しない、または試してはならないもの:

  • geometryFlippedレイヤーに設定します。サブレイヤーに影響しますが、カスタム描画には影響しません。(もちろん、すべての「描画」がシェイプ レイヤーとテキスト レイヤーとプレーン レイヤーである場合は、このプロパティを設定するだけで、変換について心配する必要はありません。)
  • contentsAreFlippedCALayer サブクラスでのオーバーライド。ドキュメントには、そうしないように書かれています。
  • ビューまたはそのレイヤーの を設定しますtransform。ドキュメントによると、適用される座標空間transformの原点はanchorPointコーナーではなく、中心 (または ) にあります。それは魅力的ですが、私は陽気さが続くことを期待しています.
于 2013-10-05T20:09:27.817 に答える