У меня есть несколько UIView, которые имеют несколько сложные формы, которые я нарисовал с помощью каждого метода drawRect :. Я сохранил ссылку на путь (через свойство CGPath) и использую ее в своих методах касаний, чтобы определить, действительно ли касание находится внутри контура или формы (CGPathContainsPoint). Из-за форм есть области представления, которые являются прозрачными (очевидно, все, что не является квадратным / прямоугольным, будет иметь области прозрачности, если для свойства backgroundColor представления установлено значение clearColor или что-то подобное).
Для ситуаций (которые случаются часто), когда представления оказываются сверху или перекрывают друг друга, я тестирую методы касаний (touchesBegan и т. Д.), Чтобы увидеть, действительно ли касание находится в пределах CGPath или формы. Если касание выходит за пределы формы, я перенаправляю касание на следующий вид внизу, чтобы проверить, соответствует ли оно, в свою очередь, этому требованию.
К сожалению (и к моему большому разочарованию), это не ведет себя так же, как прикосновение, фактически привязанное к виду. Я работал над этой проблемой всеми способами, кроме одного, в частности. Каждое представление использует UIRotationGestureRecognizer. Но если прикосновение происходит в прозрачной области другого представления, и это представление пересылает это касание на представление под ним, UIGestureRecognizer никогда не запускается.
Я смотрел на это со всех сторон, которые я знаю. Я попытался придумать какой-нибудь способ действительно переназначить или привязать касание к соответствующему виду, но я не знаю, возможно ли это вообще. Пока представления просто пересылают касание другому представлению, прикосновение останется привязанным к исходному представлению, которое первым получило касание.
Интересно, можете ли вы сделать что-то таким образом, создав подкласс UIApplication или UIWindow и переопределив метод sendEvent: ". Я не совсем уверен, какой контроль Apple может дать вам в этом. Я не могу позволить себе делать что-либо, что могло бы иметь доступ к частным API. Мне просто нужен способ переназначить прикосновение, чтобы представление считало, что прикосновение принадлежит ему.
Любые идеи?'