質問

私は時折programmaticalyのNSViewの大きさを変更したいです。これを行うには、さまざまなビューの寸法を取得し、互いに対してそれらを調整し、その後、setFrame使用すると便利です。再配置するが、

問題は、フレーム方式は、通常、私の観点から、明らかに間違っているNSRectsを返すということです。

私は私のメインプログラムにInterface Builderをし、様々な接続に設定しNSPanelでプログラムを持っています。フレームによって返さNSRectsをテストするために、私は自分のアプリケーションのawakeFromNibでパネルを開く:この方法は、いくつかのNSRectsを取得し、コンソールにそれらを印刷

ここに私のawakeFromNibです。

- (void)awakeFromNib {
  NSLog(@"in awakeFromNib");
  [self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
                              //note that it does indeed pop up and is displayed
  originalFrame = [aTextView frame];
  NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
  originalFrame = [aButton frame];
  NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
  return;
  }

このコードの結果は、コンソールで次のようになります:

in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344

(i)はパネルとの両方のコントロールが画面に表示されることに注意してください。 (ⅱ)私はプログラム的にコントロールに物事を行うと、彼らが働くことができますので、私は、コンセントが正しく接続されているという事実を知っています。 (III)インタフェースビルダーは、「サイズおよび位置」でインスペクタで正しいフレームサイズを示します。

要するに、プログラムに関する他のすべてが完璧に働いています。実際にフレームサイズが適切か何かに設定されていないと思われます。

誰かがどのように実際のフレーム情報を取得するに教えてもらえますか?あるいは、少なくとも私は見ていた結果を説明する?

役に立ちましたか?

解決

フレーム座標は浮動小数点数ですが、あなたのログメッセージは%dを使用しています。 (int値)。

へのNSLog文字列を変更

@"the frame is %f, %f, %f, %f"

編集ます:

ここでrectsをデバッグするときに私が使用して非常に便利なマクロです

#define RECTLOG(rect)    (NSLog(@""  #rect @" x:%f y:%f w:%f h:%f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height ));

これで、簡単にRECTログを行うことができます:

RECTLOG([aTextView frame]);

他のヒント

NSRectをログに記録する場合は、

、フィールドは整数、浮動小数点値をされていないことを覚えています。

の形式を書くことは、自分自身(インラインまたはマクロ経由のいずれか)指定子のではなく、フレームワークがあなたのために提供した機能を使用します:

NSLog(@"frame - %@", NSStringFromRect([view frame]));

も参照してください。

NSStringFromSize
NSStringFromPoint
NSStringFromRange

など

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top