Создать маскирующий слой без прямой обработки изображений? - PullRequest
0 голосов
/ 07 марта 2012

Я в основном пытаюсь добиться этого эффекта.Это можно сделать с помощью PNG с прозрачным отверстием, вырезанным поверх него, а затем сложенным поверх фото.jpg UIView.ИЛИ я также видел метод, в котором вы можете напрямую создать маску с помощью CGImageMaskCreate.Я не хочу использовать эту функцию, потому что я хочу, чтобы пользователь мог взаимодействовать со слоем photo.jpg (путем его перемещения, вращения и т. Д.):

enter image description here

Это, по сути, два UIViews, расположенные друг на друге.

Однако, что если вместо использования синего я бы хотел использовать другой цвет или даже создать рисунок с [UIColor colorPatternWithImage:] для маскирующего слоя?Я не хотел бы делать миллион разных PNG для каждого случая.

Нужен ли какой-нибудь способ программно воссоздать мою маску?Есть ли способ конвертировать мои маски в код?Любая помощь приветствуется.Спасибо

1 Ответ

4 голосов
/ 07 марта 2012

CALayer имеет свойство с именем mask, которое является еще одним CALayer, определяющим маску для использования.Вы можете использовать CAShapeLayer для определения маски, а затем установить ее как mask другого слоя, который визуализирует ваше затемняющее изображение / цвет / рисунок / что угодно.Вы также можете использовать обычную CALayer в качестве маски с полупрозрачным изображением в качестве содержимого, это зависит от того, хотите ли вы возможность настраивать размер / форму отверстия.

Предостережения:CAShapeLayer медленнее, чем обычные слои, а mask медленнее, чем немаскировка.Возможно, вам нужно убедиться, что производительность приемлема для вас.Вы также можете попробовать флаг shouldRasterize, хотя это только улучшит производительность (за счет памяти), пока слой статичен (т.е. не анимируется).

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