Cocoa 用の視覚的なConway's Game of Lifeプログラムに取り組んでいます。もちろん、メイン ビューは基本的に、アルゴリズムが進行するにつれて黒と白の間で色が変化する正方形のタイルのグリッドですが、この正方形のグリッドを描画および管理する最良の方法を見つけるのに苦労しています。
私の最初のアイデアは、各タイルを NSView のサブクラスにすることでした。描画は非常に簡単です。生きている場合は黒で塗りつぶし、死んでいる場合は白で塗りつぶすだけです。しかし、それをウィンドウに配置する方法がわかりません。Interface Builder で個別の NSView としてレイアウトする (そしてそれぞれに IB アウトレットを設定する) のは面倒に思えます。プログラムでそれらを配置することもできますが、それも面倒に思えます (特に、各タイルの間に少しスペースを空けたいので)。
NSMatrix はインターフェイス オブジェクトの配列 (またはグリッド) で動作するように明示的に設計されていることを思い出したので、NSView サブクラスの NSMatrix を作成するだけでよいと考えました。問題は、NSControls の NSMatrix しか作成できないように見えることです。私のカスタム タイル ビューは、マウス トラッキング イベントなどを受け入れる必要がないため、それ自体は実際にはコントロールではありませんが、それを偽造して、描画のためだけに使用できると考えました (すべてのイベントを無視します)。
もちろん、同じタイプの NSControl を大量に使用している場合は、NSCell を使用して描画を行うのが最善ですが、NSCell はテキスト ベースまたは画像ベースのコントロールの描画により適しているようです。黒または白の四角形を描画する簡単な方法がわかりません。
私は描画を行うために NSControl サブクラスを悪用し、それに NSCell を関連付けることをスキップする方向に傾いていますが、もっと良い方法やまだ考えていない何かがあるのではないかと思いました。