Я бы, конечно, предложил пойти по этому пути. Вы можете использовать подкласс NSView для получения и обработки событий касания, затем вы можете затем использовать местоположение касания, чтобы вычислить ячейку, в которую попали, и соответствующим образом обновить вашу модель.
Вы размещаете CALayers в иерархии, поэтому - хотя сложность дерева представлений будет зависеть от других элементов пользовательского интерфейса, которые вы хотите иметь, - у вас будет CALayer, содержащий 900 подслоев.
Использование Core Animation также позволит вам быть удивительным с анимациями.
Это будет немного сложнее, но вам просто нужно прикусить пулю и застрять в документации по Core Animation и / или купить книгу.
Удачи.
Редактировать: Иван предлагает использовать сообщение hitTest. Таким образом, вы можете получить слои, чтобы сказать вам, какой из них был поражен. Используя это, очевидно, довольно приятно. Однако, если вы ищете скорость, может быть быстрее избежать этого и просто решить ее. Это делает предположения о том, как работает ваша игра (то есть кнопки / ячейки не перемещаются). Если у вас есть шанс, попробуйте оба варианта и дайте нам знать, как это работает. : О)