Можно ли игнорировать панорамирование на прозрачных частях UIImageViews? - PullRequest
2 голосов
/ 22 января 2012

Я работаю над приложением, которое позволяет пользователю размещать графику друг над другом.

Графические объекты создаются как UIImageView и прозрачны вне реальной графики.Я также использую жесты панорамирования, чтобы пользователь мог перетаскивать их по экрану.

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

Мне было интересно, есть ли у кого-нибудь идеи о том, как мы можем достичь ТОЛЬКО слушаяжест панорамирования на твердой части изображения.Или что-то, что облегчит взаимодействие с пользователем, чтобы все, к чему они прикасались, было тем, что они выбирали.Спасибо

1 Ответ

6 голосов
/ 22 января 2012

Создайте свой собственный подкласс UIImageView. В вашем подклассе переопределите метод pointInside:withEvent:, чтобы вернуть NO, если точка находится в прозрачной части изображения.

Конечно, вам нужно определить, находится ли точка в прозрачной части. :)

Если у вас есть CGPath или UIBezierPath, который выделяет непрозрачные части вашего изображения, вы можете легко сделать это, используя CGPathContainsPoint или -[UIBezierPath containsPoint:].

Если у вас нет удобного пути, вам придется проверить пиксельные данные изображения. На stackoverflow.com уже есть много ответов, которые объясняют, как это сделать. Искать get pixel CGImage или get pixel UIImage.

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