Я работал над приложением Cocoa Touch и пытался обрабатывать касания, определяя, какой подслой слоя вида был затронут.Код моего контроллера выглядел так:
CALayer *hitLayer = [self.view.layer hitTest:point];
Это не сработало.Это сработало бы, если бы я постучал по основаниям подслоев, но не по вершинам.После часа потянув за волосы и погуглив, я наконец-то понял, что это работает, если использовать тестовый слой для тестирования на удар вместо самого слоя:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
Итак, я решилМоя проблема, но мой вопрос: почему?
Я прочитал руководство по базовой анимации и понимаю, что дерево презентации и дерево рендеринга могут отличаться от дерева объектной модели.Но я не понимаю, почему дерево презентации будет (по-видимому) иметь другое поведение при тестировании на попадание.Разве дерево презентации и объектная модель не будут иметь одинаковые рамки, границы и т. Д.?