2007/01/23

NSMatrixのセルの動的配置

前回書いた通り、NSMatrixへのセルの配置をちゃんとやってみることにした。

まず決め打ちしていた横のセル数は親の横幅を取得し、そこから算出すればよいはずと考えそのように書いてみたところほぼうまく行った。

ここで使っているNSMatrixはNSViewを継承していて親はNSView:superviewで取得できる。NSViewでは、NSView:frameを使えば縦横の大きさが取得できる。

// Get parent view's width.
NSView* parent = [self superview];
NSRect rect = [parent frame];
int cols_per_line = rect.size.width / 62;

最後の62という値はInterface Builderのプロパティとして表示されていたものを決め打ち。本当はセルの横幅を取らなければいけない。

もう1つ前回ちゃんと動いていなかった画像が追加されるセルが間違っていた問題は、画像モデルの配列要素数をNSMatrixのセルインデックスに使えばよいのに、NSMatrixのセルの個数を使っていたという単純な誤りだった。

この2つを直したところほぼ思った通りに動いてくれた。


そして、セルをどんどん追加していくとこんな感じ。


最後のセルが微妙にずれていて、一部隠れているのが気になるところ。どうも決め打ちした62という値が悪いような気がする。62ではなく何らかの幅が足されて実際は64ずつ増えているとすると、ほぼこの現象が説明できる。セル間の余白か何かがあるのだろうか?

今日はここまで。次のゴールは以下の3つ:
  1. ウィンドウをリサイズした時にも並べ直ししなければならないけれど今はそれに反応しない。ウィンドウのリサイズイベントを拾って再配置するコードを追加すれば良いだろう。
  2. セルのサイズをちゃんと取得しよう。NSMatrixにはセルのクラスを取得するメソッドがあるので、それを使えばよいような気がするのだが、セルそれぞれの大きさが違うことはあるのか。
  3. Interface Builderで得られる62ピクセルという幅のセルを配置するとなぜか計算が微妙にずれる問題の原因を突き止めよう。上記の通り、セルの余白が怪しいと思う。

0 件のコメント: