我有一个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/