1

我有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,并将其用作遮罩层。如果有人对这个过程感兴趣,它正在这个测试项目中使用。

4

3 回答 3

1

一个明显的方法是手动绘制这种效果。从很小的地方开始,将旭日形画得越来越大,并且(同时)越来越不透明。

另一方面,制作径向渐变并将其用作蒙版(晕影效果)可能就足够了。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.aeth.com/iOSBook/ch17.html#_cifilter_transitions

于 2013-04-16T18:24:33.507 回答
0

CAGradientLayer绘制线性渐变。

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

l.shadowColor = [UIColor blackColor];
l.shadowRadius = rect.size.width / 2;
于 2013-04-16T17:46:15.160 回答
0

您可以通过创建一个 CALayer 实例并给它一个实现 drawLayer:inContext: 的委托并在该方法的实现中绘制一个径向渐变来做到这一点。然后使用那个 CALayer 作为你的面具。

于 2013-04-16T18:16:15.487 回答