Почему нужно использовать presentationLayer CALAYER для тестирования хита?

Я работал над Сенсорным приложением Какао и пытался обработать касания путем определения, какой подуровень слоя представления был затронут. Код моего контроллера был похож на это:

CALayer *hitLayer = [self.view.layer hitTest:point];

Это не работало. Это работало бы, если бы я коснулся в нижних частях подуровней, но не в вершинах. После часа получения по запросу волос и поиска с помощью Google, я наконец выяснил, что это работает, если Вы используете уровень представления, чтобы сделать тестирование хита вместо самого слоя:

CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];

Так, я решил свою проблему, но мой вопрос: Почему?

Я прочитал Базовое руководство по Анимации, и я понимаю, что дерево презентации и дерево рендеринга могут отличаться от дерева объектной модели. Но я не понимаю, почему дерево презентации (по-видимому), имело бы другое тестирующее хит поведение. Не был бы дерево презентации и объектная модель имеют те же кадры, границы, и т.д.?

6
задан Kristopher Johnson 4 February 2010 в 15:35
поделиться

1 ответ

Согласно документация CALayer , кажется, есть разница между моделью и деревом представления относительно того, что представляется пользователю (в зависимости от текущей анимации). Для проверки попадания есть ссылка в методе presentationLayer :

Например, отправка сообщения hitTest: в PresentationLayer запросит значения представления дерево слоев.

Поэтому я подозреваю, что только уровень представления имеет правильную геометрическую информацию для выполнения проверки попадания.

4
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: