Вам нужно будет создать свое изображение с альфа-каналом.В соответствии с документацией свойства маски 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.Но это другой вопрос .....