代码之家  ›  专栏  ›  技术社区  ›  Nir Tzezana

截短词结尾处的渐变渐变

  •  0
  • Nir Tzezana  · 技术社区  · 7 年前

    我想得到这样的结果:
    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

    0 回复  |  直到 5 年前
        1
  •  0
  •   Mehul Patel Nikita Khandelwal    6 年前

    您的代码的问题是您正在修复这里的层大小。

    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;
    

    对于奖励-你可以通过增加更多的颜色到数组中,并通过改变颜色使这个效果更平滑 startPoint endPoint 一层。

    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;