2012-02-28 2 views
5

インターフェイスビルダーには、支柱とスプリングのインスペクタに原点ラベルが付いたコントロールがあります。これは何を行い、なぜ1つのオブジェクトに対してそれを変更すると、すべてのオブジェクトに対してそれを変更するのですか?オリジンコントロールはインターフェイスビルダで何をしますか?

Origin Control

私の知る限りは、名前が示すように、フレーム矩形の原点上の任意の実際の効果を持っていないことを言うことができるように。

UILabelを選択し、上の写真のように右上になるように原点を変更すると、フレーム原点が点(280,11)に置かれます。しかし、コードでは、実際にフレームの原点を尋ねると、フレームの左上隅に対応する(211,11)として与えられます。したがって、インターフェースビルダーのフレーム原点を変更することは、絶対に何もしないようです!ここで何が起こっているのですか?

+0

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html – Nathan

+0

Nathan - 以前は見たことのない素晴らしい文書ですが、それはありません。起点INインタフェースビルダを変更しても、ビューの実際の起点には影響しない理由を説明してください。 –

答えて

7

すぐ隣のフィールドを編集している場合を除き、何もしません。選択したアンカーポイントに応じてX座標とY座標が変化することに注意してください。これは、オブジェクトをその中心または辺で整列させることを容易にするためのものです。

すべてのオブジェクトで変更される理由は、オブジェクト自体について実際には何も影響しないためです。 「実際の」座標系は、そこに表示されているX値とY値にかかわらず同じままです。

OS Xでは、ネイサン氏によると、座標系の原点は左下にあり、座標は右上がります。 iOSでは、原点は左上にあり、座標は右下がりになります。

+0

ありがとうございました!幅を定義するときに右に向かって何かを成長させることは、動的テキストを持つラベルに役立つため、インターフェースビルダーでは変更できないというのは残念です。 –

+0

真。そのような場合は、ラベルのテキストが右揃えで、ラベルの長さがテキストの最大長に収まるだけの幅がある場合があります。それがオプションではない場合でも、常にNSStringメソッド '-sizeWithFont:constrainedToSize:lineBreakMode:'があります。 –

3

私は今、正確な答えをしませんが、私はそれはあなたが(ちょうど例)のように、そのオブジェクトのために設定した原点コードに関係していると思います

- (void) Button { 

     CGRect frame = button.frame; 
     frame.origin.x = 500; // new x coordinate 
     frame.origin.y = 500; // new y coordinate 
     button.frame = frame; 
} 

そしておそらく方法があります

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html

ココアは、その基本として直交座標系を使用しInterFace Builder原点ツールに接続なる設定にframe.originを設定します座標を指定する のモデル。このシステムの原点は、現在の図面スペースの左下隅にある にあり、正の値 が原点の右上および右軸に沿って延びています。システム全体のルート起点 は、メニューバーを含む画面の左下の にあります。

すべてのコンテンツを画面座標で描画することを余儀なくされた場合は、 座標系の原点が の左下隅にあります。コードはかなり複雑です。 は物事を単純化するために、ココアはローカル座標系を設定します。起源は で、描画しようとしているウィンドウまたはビューの起点と同じです。 ウィンドウまたはビュー内の後続の描画呼び出しは、このローカル座標系に対して相対 となります。コードの描画が終了すると、ココア とその下にあるグラフィックスシステムは、 の座標をスクリーン座標に変換して戻し、コンテンツを他のアプリケーションのコンテンツと合成して グラフィックスハードウェアに送信することができます。

関連する問題