首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆形CAGradientLayer面罩

圆形CAGradientLayer面罩
EN

Stack Overflow用户
提问于 2013-04-16 17:39:25
回答 2查看 5.8K关注 0票数 1

我有一个UIView,它以编程方式使用UIBezierPath绘制一个"太阳暴晒“模式。现在,我想通过用渐变掩蔽边缘来扩展这一点--有效地使每个“爆裂”从不透明变为透明。我认为这可以用一个CAGradientLayer面具,但我不知道如何使它循环。

这就是我所尝试的--它掩盖了视图,但是梯度是线性的:

代码语言:javascript
复制
    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,并将其用作掩码层。如果有人对此过程感兴趣,它将在这个测试项目。中使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 18:24:33

一个明显的方法是手动绘制这一效果。从很小的地方开始画太阳爆发越来越大(同时)越来越不透明。

另一方面,它可能是足够的径向梯度,并使用它作为一个掩模(小体效应)。核心图形将为您绘制径向梯度:

参考文件/c/func/CGContextDrawRadialGradient

我也非常喜欢CIFilters,因为它添加了这样的内容:您应该翻阅目录,看看有什么让您印象深刻:

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

实际上,CIFilter为您提供了一个可能适合您的目的的太阳暴晒转换,特别是与掩蔽和合成相结合时;下面是我的书中关于太阳暴晒(在动画中使用)的讨论:

跃迁

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 18:16:15

您可以通过创建一个CALayer实例并为它提供一个实现drawLayer:inContext:并在该方法的实现中绘制径向梯度的委托来完成这一任务。然后使用那个CALayer作为你的面具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16043534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档