截词末尾的渐变淡入

时间:2019-02-03 14:38:08

标签: ios objective-c swift gradient

我正在尝试达到这样的结果:
enter image description here

我似乎无法到达那里,这是我的代码:

if (size.width > self.name.bounds.size.width) {
    CAGradientLayer *l = [CAGradientLayer layer];
    CGRect myFrame = self.name.bounds;
    myFrame.size.width = 10.0f;
    l.frame = myFrame;
    l.colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
    l.startPoint = CGPointMake(0.0f, 0.0f);
    l.endPoint = CGPointMake(1.0f, 0.0f);
    self.name.layer.mask = l;
}

我现在得到的是这个:
  enter image description here

有帮助吗?

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是您要在此处固定图层大小。

myFrame.size.width = 10.0f;

以上行将帧大小固定为10像素。这样,图层大小将达到10像素。而且图层只能在此宽度上渲染。

只需注释或删除上面的行即可获得所需的结果。

这样您的代码现在就像

CAGradientLayer *l = [CAGradientLayer layer];
CGRect myFrame = self.name.bounds;
//    myFrame.size.width = 10.0f;
l.frame = myFrame;
l.colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
l.startPoint = CGPointMake(0.0f, 0.0f);
l.endPoint = CGPointMake(1.0f, 0.0f);
self.name.layer.mask = l;

要获得额外的奖励-您可以通过向数组中添加更多颜色并更改图层的startPointendPoint使此效果更加平滑。

CAGradientLayer *l = [CAGradientLayer layer];
CGRect myFrame = self.name.bounds;
l.frame = myFrame;
l.colors = @[(id)[UIColor lightGrayColor].CGColor, (id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
l.startPoint = CGPointMake(0.0, 0.5);
l.endPoint = CGPointMake(1.0, 0.5);
self.name.layer.mask = l;