美文网首页
关于 layer.mask = label.layer 出现空白

关于 layer.mask = label.layer 出现空白

作者: dingzhijie | 来源:发表于2017-09-18 10:15 被阅读0次

    源代码如下:

    self.numLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width/3, 60)];

    [self.view addSubview:self.numLabel];

    self.numLabel.center = self.view.center;

    self.numLabel.textAlignment = NSTextAlignmentCenter;

    self.numLabel.font = [UIFont systemFontOfSize:30];

    self.numLabel.text = @"53695";

    //  创建 CAGradientLayer 对象

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];

    //  设置 gradientLayer 的 Frame

    gradientLayer.frame = CGRectMake(CGRectGetMinX(self.numLabel.frame), CGRectGetMinY(self.numLabel.frame), self.view.frame.size.width/3, 60);

    //  创建渐变色数组,需要转换为CGColor颜色

    UIColor * red = [UIColor colorWithRed:253/255.0 green:93/255.0 blue:97/255.0 alpha:1.0];

    gradientLayer.colors = @[(id)[red colorWithAlphaComponent:0.3].CGColor,

    (id)red.CGColor

    ];

    //  设置二种颜色变化点,取值范围 0.0~1.0

    gradientLayer.locations = @[@(0.0),@(1.0)];

    //  设置渐变颜色方向,左上点为(0,0), 右下点为(1,1)

    gradientLayer.startPoint = CGPointMake(0, 0);

    gradientLayer.endPoint = CGPointMake(1, 0);

    // 切成 填充 图形的形状.

    [self.view.layer addSublayer:gradientLayer];

    gradientLayer.mask = self.numLabel.layer;

    这样运行之后会出现空白 label  不见了

    这是因为:

    1.mask,遮盖的结果是:在被mask的对象上留下mask对象非空白的部分(被mask对象.mask=mask对象;)

    这个效果常常配合CAGradientLayer使用做出变色字,也就是动态的上面的效果;

    2.mask的核心思想在于:mask对象在这行代码(被mask对象.mask=mask对象;)执行完之后坐标系发生的改变,被假设性的放置在了被mask对象上面,并且frame没有相应的变化,所以导致了用外部的layer直接裁剪会出现空白的情况,当然如果是子layer裁剪那么就一点问题没有;因此,需要在(被mask对象.mask=mask对象;)之后追加一个控制mask对象frame的语句,给它一个位置。(需要注意:mask对象其实是被从自己曾今的父视图或者父layer上被移除了,而且也没到被mask的那个layer上去)。

    相关文章

      网友评论

          本文标题:关于 layer.mask = label.layer 出现空白

          本文链接:https://www.haomeiwen.com/subject/govvsxtx.html