2009-07-19 10 views
2

これは、標準(カスタムではない)ココアで描画されるテキストの座標を取得できますか?実際には、テキストのベースライン、y軸のオフセット値(ビューのフレーム矩形のy原点を基準にして)が必要です。 Layout-> Show Layout Rectanglesが選択されている場合、これはInterface Builderがデザインペインに表示するものです。Cocoaはテキストの位置を制御しますか?

答えて

2

残念ながら、すべてのコントロールとセルで機能するソリューションはありません。あなたはこれらのメソッドで、この情報の良好な近似値を得ることができる必要があります:

-[NSCell titleRectForBounds:] 
-[NSCell font] 
-[NSFont ascender] 

ここでは、この時点ではNSButton/NSButtonCell

NSRect titleRect = [[button cell] titleRectForBounds:[button bounds]]; 
CGFloat baseline = ceil(NSMinY(titleRect) + [[[button cell] font] ascender]); 

のために働くいくつかのコードだ、ベースラインは、ボタンの(境界内にあります)座標空間。あなたは - [NSView convertPoint:toView:];で他のスペースに変換したいかもしれません。

また、「ceil」には近似値があります。すべてのコントロールがそうするわけではありません。いくつかは床、または他の丸め機能を使用することがあります。あるいは、彼らのタイトルを完全に違ったものにするかもしれません。この近似はうまくいかないでしょう。

+2

これは正しいことに真の痛みです。 Adobe Lightroomでは、コントロール用の独自のレイアウトシステムが用意されています。テキストのベースラインがどこに描画されているかを確認するための真の恩恵だったツールの1つは、poseAs:を使用してデバッグコードを追加し、いくつかのグローバル描画コードを通常の描画の上に重ねて挿入することでした。基本的には、デバッグビルドでこれをオンにして、ベースラインが気になるすべてのコントロールにどこにあるのかを表示できます。あなたがこれをたくさんしているなら、それはあなたの時間を節約することになります。 私は所有権の性質上、コードを共有することはできません。申し訳ありません。 –

+0

poseAs:Leopardでは非推奨です。 – IlDan

関連する問題