CGPath из изображения - PullRequest
       48

CGPath из изображения

0 голосов
/ 08 декабря 2011

Мне нужно создать маску на основе изображения (любой возможной формы).Мне нужно:

  1. Создать CALayer с CGPath в качестве правильной маски
  2. Вызвать [UIView.layer setMask: со слоем выше]

Итак, большой большойВопрос в том, как установить CGPath на основе черно-белого изображения?Или можно разместить маску непосредственно с изображения?

Спасибо!


Пример изображения маски: example mask

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

Вам нужно будет создать свое изображение с альфа-каналом.В соответствии с документацией свойства маски CALayer:

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

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

UIImage* imageWithAlphaChannel = [UIImage imageNamed:@"alpha.png"]; // Won't work with jpg
CGImageRef cgImageWithAlpha = [imageWithAlphaChannel CGImage];
CALayer* maskingLayer = [CALayer layer];
maskingLayer.contents = (id)cgImageWithAlpha;

//Assume viewToBeMasked is the view, who's layer needs to be masked
CALayer* layerToBeMasked = viewToBeMasked.layer;
layerToBeMasked.mask = maskingLayer;
maskingLayer.frame = layerToBeMasked.bounds;
//Alternativly use: viewToBeMasked.layer.mask = maskingLayer;

Код в браузере, простите за системные ошибки.

Хранение всех ваших масок в виде файлов png может повлиять на размер вашего приложения.Вы можете сохранить маски как jpgs и создать соответствующую альфа-версию во время выполнения, используя функции рисования CoreGraphics.Но это другой вопрос .....

3 голосов
/ 08 декабря 2011

Очень похожая проблема Я думаю к тому, что я сделал некоторое время назад.По сути, вам необходимо экспортировать файл из Adobe Illustrator, а затем запустить процедуру для преобразования этого файла в CGPath.

Вы найдете, как это сделать, в моем ответе на этот вопрос:

Как обнаружить / обработать сенсорные события в изогнутых областях?

...