Чем заменить UIButton для улучшения частоты кадров? - PullRequest
0 голосов
/ 03 декабря 2009

Я создал игру-клон минного тральщика и создал ячейку размером 30 х 30. Теперь в моем проекте инициализации я планировал использовать UIButton для каждой ячейки, чтобы я мог использовать ее touchDown и touchUpInside. Но моя проблема в том, что использование UIButton замедляет масштабирование игры, особенно при загрузке или добавлении каждой ячейки (900 шт.) В UIView.

Теперь я планирую использовать изображения вместо UIButton, и я слышал о CALayer для легкой анимации. Можете ли вы предложить, как я могу использовать этот CALayer для моей реализации или замены UIButton?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Я бы, конечно, предложил пойти по этому пути. Вы можете использовать подкласс NSView для получения и обработки событий касания, затем вы можете затем использовать местоположение касания, чтобы вычислить ячейку, в которую попали, и соответствующим образом обновить вашу модель.

Вы размещаете CALayers в иерархии, поэтому - хотя сложность дерева представлений будет зависеть от других элементов пользовательского интерфейса, которые вы хотите иметь, - у вас будет CALayer, содержащий 900 подслоев.

Использование Core Animation также позволит вам быть удивительным с анимациями.

Это будет немного сложнее, но вам просто нужно прикусить пулю и застрять в документации по Core Animation и / или купить книгу.

Удачи.

Редактировать: Иван предлагает использовать сообщение hitTest. Таким образом, вы можете получить слои, чтобы сказать вам, какой из них был поражен. Используя это, очевидно, довольно приятно. Однако, если вы ищете скорость, может быть быстрее избежать этого и просто решить ее. Это делает предположения о том, как работает ваша игра (то есть кнопки / ячейки не перемещаются). Если у вас есть шанс, попробуйте оба варианта и дайте нам знать, как это работает. : О)

1 голос
/ 03 декабря 2009

На рабочем столе Cocoa есть NSCell, которая является легкой альтернативой NSButton, но это более старая технология до CALayer и Core Animation (они не конфликтуют между собой)

Чтобы создать настраиваемую кнопку, создайте пользовательский класс либо для делегатов CALayer. Затем, чтобы узнать, какая кнопка нажата, используйте метод [hitTest], который будет эффективно возвращать слой, по которому щелкнули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...