我有一个UIView,可以使用UIBezierPath以编程方式绘制“sunburst”模式。现在,我想通过使用渐变遮盖边缘来扩展此范围-有效地使每个“爆发”从不透明变为透明。我认为可以使用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,并将其用作了遮罩层。如果有人对此过程感兴趣,可以在this test project.中使用它

最佳答案

一种明显的方法是手动绘制此效果。从很小的地方开始,画越来越大的朝阳,(同时)越来越不透明。

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

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

关于ios - 圆形CAGradientLayer mask ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16043534/

10-13 02:10