Создание прозрачного CALayer
Рассмотрим следующее...
Скажем, у меня есть два CALayer, один поверх другого. Каждый слой имеет размер всего экрана iPad, верхний слой скрывает нижний слой.
Есть ли способ пометить часть верхнего слоя как "прозрачную", чтобы через прозрачную часть проходила та же самая часть нижнего слоя? Другими словами, есть ли способ "вырезать" часть верхнего слоя, чтобы показать нижний слой под ним?
4 ответа
Используете ли вы CALayer в качестве подслоя вашего UIView? Вы должны установить backgroundColor вашего UIView, чтобы очистить следующим образом:
self.backgroundColor = [UIColor clearColor];
CALayer mask
имущество. Вам нужно будет создать подкласс CALayer для drawToContext:
непрозрачный черный по всем границам, а затем сделать CGContextClear(ctx, <your see-through box>);
Затем создайте экземпляр слоя, присвойте ему тот же кадр, что и границы верхнего слоя, и установите для него свойство mask.
Да, вы можете сделать это, сделав разные значения альфа-канала для каждого слоя, в основном внутренний слой (супер) должен иметь как минимум значение альфа-канала 0,7, а внешний слой (субслой) должен иметь меньшее значение альфа-канала, чем его родитель, скажем, 0.3 Тогда внешний слой должен раскрыть внутренний слой.
Но если вы хотите сделать лучшее откровение, вы можете нарисовать внешний слой, установив на нем радиальный градиент.
Это мой пример кода, но я не нарисовал радиальный градиент для внешнего слоя.
//
CALayer *innnerLayer = [CALayer layer];
innnerLayer.borderColor = [UIColor greenColor].CGColor;
innnerLayer.borderWidth = 0.8f;
innnerLayer.backgroundColor = [UIColor colorWithWhite:0. alpha:0.5].CGColor;
innnerLayer.frame = CGRectMake(70.0, 150.0f, 100.0f, 100.0f);
CALayer *outLayer = [CALayer layer];
outLayer.frame = innnerLayer.bounds;
outLayer.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.3f].CGColor;
// add outer layer to inner layer
[innnerLayer addSublayer:outLayer];
// add the inner layer to main view
[self.view.layer addSublayer:innnerLayer];
// Экспериментируем с разными значениями альфа, но externalAlpha
Просто настройка backgroundColor
собственность на NULL
помог мне.