layer的mask属性

2020-08-05  本文已影响0人  冷武橘

一、mask

An optional layer whose alpha channel is used to mask the layer’s content.
mask 也是一个layer层,通过它的alpha通道来控制layer层得显示。

    CALayer *backLayer = [[CALayer alloc]init];
    backLayer.frame = CGRectMake(0, 100, 300, 300);
    backLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.view.layer addSublayer:backLayer];
    
    CALayer *masklayer = [[CALayer alloc]init];
    masklayer.frame  = CGRectMake(20, 100, 100, 100);
    masklayer.backgroundColor = [UIColor yellowColor].CGColor;
    backLayer.mask = masklayer;

二、渐变色进度条


 // 进度条view
  UIView *progressView = [[UIView alloc] initWithFrame:CGRectMake(30.0, 100.0, self.view.bounds.size.width - 30.0 * 2, 5.0)];
  progressView.center = (CGPoint){self.view.bounds.size.width / 2, self.view.bounds.size.height / 3};
  progressView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
  progressView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:.3];
  progressView.layer.cornerRadius = progressView.bounds.size.height / 2;
  progressView.layer.masksToBounds = YES;
  [self.view addSubview:progressView];

  // 渐变色layer
  CAGradientLayer *gradientLayer = [CAGradientLayer layer];
  gradientLayer.frame = progressView.bounds;
  gradientLayer.colors = @[(__bridge id)[[UIColor greenColor] colorWithAlphaComponent:1.0].CGColor,
                           (__bridge id)[[UIColor blueColor] colorWithAlphaComponent:1.].CGColor,
                           (__bridge id)[[UIColor purpleColor] colorWithAlphaComponent:1.0].CGColor,];
  gradientLayer.startPoint = (CGPoint){.0};
  gradientLayer.endPoint = (CGPoint){1.0};
  [progressView.layer addSublayer:gradientLayer];

  // mask layer
  CALayer *maskLayer = [CALayer layer];
  maskLayer.frame = (CGRect){.0, .0, .0, gradientLayer.bounds.size.height};
  maskLayer.backgroundColor = [UIColor whiteColor].CGColor;
  gradientLayer.mask = maskLayer;

  // 设置变化规则
  CGFloat deltaWidth = gradientLayer.bounds.size.width / 60;
  [NSTimer scheduledTimerWithTimeInterval:.1 repeats:YES block:^(NSTimer * _Nonnull timer) {
      CGRect rect = maskLayer.bounds;
      rect.size.width += deltaWidth;
      maskLayer.frame = rect;
      if (gradientLayer.bounds.size.width - maskLayer.bounds.size.width < deltaWidth) {
          [timer invalidate];
      }
  }];

三 、渐变色的文字

    UIView *contentView = [[UIView alloc]init];
    [self.view addSubview:contentView];
    contentView.backgroundColor = [UIColor redColor];
    contentView.frame = CGRectMake(100, 100, 300, 300);

   // 渐变色layer
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = contentView.bounds;
    gradientLayer.colors = @[(__bridge id)[[UIColor greenColor] colorWithAlphaComponent:1.0].CGColor,
                             (__bridge id)[[UIColor blueColor] colorWithAlphaComponent:1.].CGColor,
                             (__bridge id)[[UIColor purpleColor] colorWithAlphaComponent:1.0].CGColor,];
    gradientLayer.startPoint = CGPointMake(0, 0);
    gradientLayer.endPoint = CGPointMake(1, 0);
    [contentView.layer addSublayer:gradientLayer];

 
    UILabel *lable =[[UILabel alloc]init];
    lable.text = @"测试测试测试测试测试测试测试";
    lable.font = [UIFont systemFontOfSize:30];
    contentView.maskView = lable;
    lable.frame = contentView.bounds;
    

四、给View设置圆角

    UIView *redView = [[UIView alloc]init];
    [self.view addSubview:redView];
    redView.frame = CGRectMake(100, 100, 100, 40);
    redView.backgroundColor = [UIColor redColor];
    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:redView.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
    CAShapeLayer*maskLayer = [[CAShapeLayer alloc]init];
    maskLayer.path= path.CGPath;
    redView.layer.mask = maskLayer;
上一篇 下一篇

猜你喜欢

热点阅读