2012-03-07 2 views
0

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

enter image description here

Ее по существу два UIViews укладываются непосредственно друг над другом.

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

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

ответ

4

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

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

Смежные вопросы