Как определить, содержится ли точка касания в содержимом рисования CALayer? - PullRequest
1 голос
/ 08 февраля 2012

В UIView добавлено три слоя. Один слой рисует прямоугольник. Один рисует круг. Один рисует многоугольник. Непрозрачность слоя - нет. Когда я коснулся многоугольника, я хочу получить правильный слой, который рисует многоугольник. И три слоя полностью заполнены для просмотра. Я реализовал это. Но я не знаю, есть ли у нас лучшее решение, чтобы решить его. Мой способ таков: 1. Рисование контента с использованием -drawLayer: inContext. сохраните CGPath, который вы использовали. 2. В методе UIView -touchedEnded: withEvent. используя CGPathContainsPoint (), чтобы определить, содержится ли точка касания в CGPath.

Может быть, это глупый способ решить это. Кто-нибудь, кто может сказать мне, как решить это лучше?

1 Ответ

1 голос
/ 08 февраля 2012

Если вам нужен точный тест попадания для пути, я боюсь, что вам придется самостоятельно проверять / перебирать иерархию слоев, если точка находится внутри вашего пути, используя CGPathContainsPoint, как вы предлагали.

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

Для менее мелкозернистого контроля вы можете получить затронутый слой, используя метод CALayer s

- (CALayer *)hitTest:(CGPoint)thePoint

.

Если у вас есть иерархия слоев с уровнем вложенности <1000 (что почти всегда верно), я бы не сильно волновался. </p>

...