Создание прозрачного CALayer - PullRequest
0 голосов
/ 01 ноября 2011

Рассмотрим следующее ...

Скажем, у меня есть два CALayer, один поверх другого. Каждый слой размером с весь экран iPad, верхний слой скрывает нижний слой.

Есть ли способ пометить часть слоя top как "прозрачную", чтобы тот же участок слоя bottom проходил через прозрачную часть? Другими словами, есть ли способ «вырезать» часть верхнего слоя, чтобы показать нижний слой под ним?

Ответы [ 4 ]

0 голосов
/ 03 февраля 2016

Используете ли вы CALayer в качестве подслоя вашего UIView? Вы должны установить backgroundColor вашего UIView, чтобы очистить, как это:

self.backgroundColor = [UIColor clearColor];
0 голосов
/ 29 октября 2013

Да, вы можете сделать это, делая разные альфа-значения для каждого слоя, в основном внутренний слой (супер) должен иметь как минимум значение альфа 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

0 голосов
/ 26 февраля 2015

Мне просто помогло установить backgroundColor свойство NULL.

0 голосов
/ 02 ноября 2011

CALayer mask свойство. Вам нужно будет создать подкласс CALayer для drawToContext: непрозрачного черного по всем границам, а затем сделать CGContextClear(ctx, <your see-through box>);

Затем создайте экземпляр слоя, присвойте ему тот же кадр, что и границы верхнего слоя, и установите для него свойство mask.

...