圆形CAGradientLayer面膜(Circular CAGradientLayer Mask)

2019-10-18 01:23发布

我有一个UIView以编程方式绘制一个“ 旭日使用”模式UIBezierPath 。 现在我想通过边缘与一个梯度掩蔽延长本 - 有效地使每个“突发”褪色从不透明到透明的。 我认为这可能与做CAGradientLayer面具,但我不知道如何使它循环。

这就是我想 - 它掩盖了看法,但梯度是线性的:

    CAGradientLayer *l = [CAGradientLayer layer];
    l.frame = CGRectMake(0.0f, 0.0f, rect.size.width, rect.size.height);
    l.cornerRadius = rect.size.width/2.0f;
    l.masksToBounds = YES;
    l.colors = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
    self.layer.mask = l;

我接受不使用CAGradientLayer如果有谁知道任何其他方式来掩盖与模糊边缘的一圈视图。

解决方案:由于马特的洞察力,我结束了绘制使用掩模视图CGContextDrawRadialGradient ,渲染,作为一个UIImage ,并将它作为一个屏蔽层。 如果有人有兴趣在这个过程中,它被用于这个测试项目。

Answer 1:

一个显而易见的方法是手工绘制这种效果。 开始很小,并绘制旭日越来越大和(同时)越来越少不透明。

在另一方面,它可能是足以使径向渐变,并使用它作为掩模(晕影效果)。 核芯显卡将以此为径向渐变为您提供:

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextDrawRadialGradient

我也很喜欢CIFilters的添加这样的接触:你应该看看通过目录,看看有什么冲击你相象:

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

CIFilter实际上你,可能会满足您的要求,特别是如果有屏蔽和合成相结合的旭日过渡; 这里的旭日(在动画中使用),从我的书的讨论:

http://www.apeth.com/iOSBook/ch17.html#_cifilter_transitions



Answer 2:

CAGradientLayer绘制线性梯度。

你可以尝试设置一个影子,看看是否适合您的需要:

l.shadowColor = [UIColor blackColor];
l.shadowRadius = rect.size.width / 2;


Answer 3:

您可以通过创建一个CALayer的实例做到这一点,并给它一个实现drawLayer委托:inContext的:在该方法的实施绘制径向渐变。 然后使用的CALayer作为你的面具。



文章来源: Circular CAGradientLayer Mask