圆形CAGradientLayer面具

我有一个UIView ,使用UIBezierPath以编程方式绘制“ 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如果有人知道用边缘模糊的圆圈遮盖视图的任何其他方法。

解决方案由于matt的洞察力,我最终使用CGContextDrawRadialGradient绘制了一个蒙版视图,将其渲染为UIImage ,并将其用作遮罩层。 如果有人对此过程感兴趣,则会在此测试项目中使用它。

一种显而易见的方法是手动绘制此效果。 从非常小的地方开始,越来越大,并且(同时)越来越不透明。

另一方面,制作径向渐变并将其用作遮罩(晕影效果)可能就足够了。 Core Graphics将为您绘制径向渐变:

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

我也非常喜欢CIFilters添加这样的function:你应该查看目录,看看你喜欢什么:

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

CIFilter实际上您提供了适合您目的的旭日过渡,特别是如果与遮蔽和合成相结合; 这是我书中关于森伯斯特(用于动画)的讨论:

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

CAGradientLayer绘制线性渐变。

您可以尝试设置阴影,看看是否符合您的需求:

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

您可以通过创建CALayer实例并为其提供实现drawLayer:inContext的委托来实现此目的:并在该方法的实现中绘制径向渐变。 然后使用CALayer作为面具。