ウィンドウのリサイズイベントは、viewDidEndLiveResizeメソッドで拾うことができる。MyMatrixの表示状態が変わるのだから、MyMatrixクラスのviewDidEndLiveResizeメソッドをオーバーライドしてみた。
- (void)viewDidEndLiveResizeここで1つ問題があった。縦横のセルの数が変わる際、それらのセルに対して画像を再設定してあげないといけないのだが、この画像の情報はモデルクラスに持たせてある。そこで、このビュークラスは、コントローラークラスに依頼してその情報を設定してもらうと良さそうだ。
{
NSLog(@"viewDidEndLiveResize");
[self maybeJustExpand];
[controller assignImageToCell];
[self sizeToCells];
[self setNeedsDisplay:YES];
[super viewDidEndLiveResize];
}
MyMatrixからMyControllerを参照したいので、これはアウトレット(outlet)の出番だ。Interface BuilderでMyMatrixからMyControllerにControl+ドラッグできればいい。次のスクリーンショットみたいに設定したいのだが、これがなかなかうまく行かない。
結局うまく出来なかった。ではどうやるのかというと、nibファイルを見るウィンドウのところの右端にあるリスト表示ボタンを押す。
すると、画面が次のように替わる。今まで謎だったが、アイコン表示ではWindowと表示されていたものは、実は階層構造になっていて、ウィンドウに配置したコントロールにアクセスできる。
ここで、MyMatrixまで辿ったあと、MyMatrixの行をControl+ドラッグし、MyControllerで離すと意図していたoutletの設定が出来た。
これでMyMatrixはメンバ変数controllerでMyControllerのインスタンスにアクセスできるようになった。ここで、(void)MyController:assignImageToCellというメソッドを書いて、モデルとビューをつないでやることで無事リサイズ時の再配置を実装できた。
これで最低限の表示はできるようになった。次は一歩進めてドラッグアンドドロップを実装してみようと思う。ゴールは、ファインダ等外部から画像ファイルをこのウィンドウにドラッグアンドドロップした際、その画像をモデルクラスに追加し、セルに表示することとする。
0 件のコメント:
コメントを投稿