我正在为 Cocoa 开发视觉Conway 的生命游戏程序。当然,主视图基本上是一个正方形网格,随着算法的进行,颜色会在黑色和白色之间变化,但我无法找出绘制和管理这个正方形网格的最佳方法。
我最初的想法是让每个图块成为 NSView 的子类。绘图很简单:如果它还活着,就用黑色填充,如果它死了,就用白色填充。但我不确定如何将它放在窗口中;在 Interface Builder 中将其作为单独的 NSView 进行布局(并为每个 NSView 设置 IB 插座)似乎很乏味。我可以以编程方式定位它们,但这似乎也很乏味(特别是因为我想在每个图块之间留出一点空间)。
我记得 NSMatrix 专门设计用于处理接口对象的数组(或网格),所以我想我可以创建一个 NSView 子类的 NSMatrix。问题是,您似乎只能创建一个 NSControls 的 NSMatrix。我的自定义平铺视图本身并不是真正的控件,因为它不需要接受鼠标跟踪事件等,但我想我可以伪造它并将其仅用于绘图(并且忽略任何事件)。
当然,如果你使用一大堆相同类型的 NSControl,最好使用 NSCell 进行绘图,但 NSCell 似乎更适合绘制基于文本或图像的控件;我没有看到一个简单的方法来绘制一个黑色或白色的矩形。
我倾向于滥用 NSControl 子类来进行绘图,并跳过将 NSCell 与之相关联,但我想知道是否有更好的方法或我还没有想到的东西。