2

在我的应用程序中,我有一个视图,我希望它在左侧和右侧有一个小的透明渐变。我可以很容易地创建左或右渐变,但我不知道如何组合它们:

CAGradientLayer *rightLayer = [CAGradientLayer layer];
rightLayer.frame = self.bounds;
rightLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
rightLayer.startPoint = CGPointMake(0.8f, 1.0f);
rightLayer.endPoint = CGPointMake(1.0f, 1.0f);

CAGradientLayer *leftLayer = [CAGradientLayer layer];
leftLayer.frame = self.bounds;
leftLayer.colors = [NSArray arrayWithObjects:(id)[UIColor clearColor].CGColor,(id)[UIColor whiteColor].CGColor, nil];
leftLayer.startPoint = CGPointMake(0.0f, 1.0f);
leftLayer.endPoint = CGPointMake(0.2f, 1.0f);


self.layer.mask = leftLayer;

如您所见,问题是我必须只为蒙版分配 1 层,并且我希望它有 2 层。如何合并 leftLayer 和 rightLayer?或者我如何将这两个图层都添加到掩码中?

非常感谢您的回答!

4

2 回答 2

4

您将必须创建一个渐变层,其渐变从透明到白色再到透明,并设置locations三个点。因此,您必须endPoint通过将其设置为 1 来将其设置为视图的另一侧(覆盖整个宽度)。

您需要将点包装在 NSValue 对象中以将它们添加到位置数组中,如下所示:[NSValue valueWithCGPoint:myCGPoint];

由于位置定义在 0 和 1 之间。您必须根据要遮罩的图层的宽度来计算值。像这样的东西:

0.2/width         // left edge
(width-0.2)/width // right edge

您已经在 0 到 1 的范围内设置了起点和终点,因此只需使用相同的值。

于 2012-06-13T14:34:36.780 回答
2

诀窍是使用其他人提到的“位置”。下面的代码在顶部和底部做了一个“淡出”渐变——如果你想让滚动文本在两端淡出屏幕,这很有用。下面的位置停止应读取为 0.0 => 0.1 从清晰淡入白色,然后 0.9 => 1.0 再次从白色淡入淡出。

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = @[(id)[[UIColor clearColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor clearColor] CGColor]];
gradient.startPoint = CGPointMake(0.5, 0.0);
gradient.endPoint = CGPointMake(0.5, 1.0);
gradient.locations = @[@0.0, @0.1, @0.9, @1.0];

[self.layer setMask:gradient];

请记住包含#import <QuartzCore/QuartzCore.h>在您的文件中。

于 2014-04-10T13:18:32.913 回答