我有一个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。
解决方案由于matt的洞察力,我最终使用CGContextDrawRadialGradient绘制了一个掩码视图,将其呈现为UIImage,并将其用作掩码层。如果有人对此过程感兴趣,它将在这个测试项目。中使用。
发布于 2013-04-16 18:24:33
一个明显的方法是手动绘制这一效果。从很小的地方开始画太阳爆发越来越大(同时)越来越不透明。
另一方面,它可能是足够的径向梯度,并使用它作为一个掩模(小体效应)。核心图形将为您绘制径向梯度:
参考文件/c/func/CGContextDrawRadialGradient
我也非常喜欢CIFilters,因为它添加了这样的内容:您应该翻阅目录,看看有什么让您印象深刻:
实际上,CIFilter为您提供了一个可能适合您的目的的太阳暴晒转换,特别是与掩蔽和合成相结合时;下面是我的书中关于太阳暴晒(在动画中使用)的讨论:
跃迁
发布于 2013-04-16 18:16:15
您可以通过创建一个CALayer实例并为它提供一个实现drawLayer:inContext:并在该方法的实现中绘制径向梯度的委托来完成这一任务。然后使用那个CALayer作为你的面具。
https://stackoverflow.com/questions/16043534
复制相似问题