美文网首页
547,CALayer之mask属性-遮罩(面试点:mask属性

547,CALayer之mask属性-遮罩(面试点:mask属性

作者: 枫叶1234 | 来源:发表于2021-03-10 10:56 被阅读0次

CALayer有一个属性叫做mask

这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性。

它类似于一个子图层,相对于父图层(即拥有该属性的图层)布局,但是它却不是一个普通的子图层。

不同于那些绘制在父图层中的子图层,mask图层定义了父图层的部分可见区域。

mask图层的Color属性是无关紧要的,真正重要的是图层的轮廓。mask属性就像是一个饼干切割机,mask图层实心的部分会被保留下来,其他的则会被抛弃

如果mask图层比父图层要小,只有在mask图层里面的内容才是它关心的,除此以外的一切都会被隐藏起来。

如下图

image.png

我们自己试试看

比如有两个Layer, 一个是红色的正方形,

image.png

一个小一点的绿色圆

如果把小一点的绿色圆当做红色正方形的maskLayer, 则最终只会在显示绿色圆范围内显示出原本红色正方形的内容

image.png
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //创建一个蓝色的Layer
    CALayer *foregroundLayer        = [CALayer layer];
    foregroundLayer.bounds          = CGRectMake(0, 0, 100, 100);
    foregroundLayer.backgroundColor = [UIColor redColor].CGColor;
    
    //创建一个路径
    UIBezierPath *apath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20, 20, 60, 60)];
    
    //创建maskLayer
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.path = apath.CGPath;
    maskLayer.fillColor = [UIColor greenColor].CGColor;
    maskLayer.fillRule = kCAFillRuleEvenOdd;
    
    //设置位置
    foregroundLayer.position = self.view.center;
    //设置mask
    foregroundLayer.mask = maskLayer;
    
    [self.view.layer addSublayer:foregroundLayer];
    
}

@end

我们再可以给遮罩层添加动画, 实现更加绚丽的效果

比如中间中间小圆逐渐变大

#import "ViewController.h"

static CGFloat num;

@interface ViewController ()

@property (nonatomic, strong) CAShapeLayer *circle;
@property (nonatomic, strong) CADisplayLink *link;

@end

@implementation ViewController

@synthesize circle;

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //创建一个CAShape
    CALayer *bgLayer = [CALayer layer];
    
    //设置大小颜色和位置
    bgLayer.bounds          = CGRectMake(0, 0, 200, 200);
    bgLayer.backgroundColor = [UIColor redColor].CGColor;
    bgLayer.position        = self.view.center;
    
    //创建一个CAShapeLayer作为MaskLayer
    circle = [CAShapeLayer layer];
    
    //设置路径
    circle.path      = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100)
                                                      radius:20
                                                  startAngle:0
                                                    endAngle:2 * M_PI
                                                   clockwise:YES].CGPath;
    circle.lineWidth = 5;
    circle.fillColor = [UIColor greenColor].CGColor;
    circle.fillRule  = kCAFillRuleEvenOdd;
    
    //设置maskLayer
    bgLayer.mask = circle;
    
    [self.view.layer addSublayer:bgLayer];
    
    //添加计时器
    self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(action)];
    [self.link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)action {
    
    num ++;
    
    circle.path      = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100)
                                                      radius:20 + num
                                                  startAngle:0
                                                    endAngle:2 * M_PI
                                                   clockwise:YES].CGPath;
    
    if (num > 1000) {
        [self.link invalidate];
    }
}

相关文章

  • 547,CALayer之mask属性-遮罩(面试点:mask属性

    CALayer有一个属性叫做mask。 这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性。 ...

  • CALayer之mask属性-遮罩

    CALayer有一个属性叫做mask。 这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性。 ...

  • 自定义转场动画-小圆点扩散

    mask的理解 CALayer有一个属性叫做mask。比如imageLayer有一个maskLayer作为mask...

  • CALayer属性mask

    CALayer的属性mask,mask也是一个layer,这边称它为maskLayer。介绍中描述 An opti...

  • CALayer的mask属性

    CALayer的mask属性俗称蒙版。@property(nullable, strong) CALayer *m...

  • CALayer之mask使用

    mask是CALayer的一个属性,它本身也是一个CALayer类。mask有和其他图层一样的绘制和布局属性。它类...

  • CALayer的mask属性

    之前对mask属性了解的特别少,今天特意来看看其用法:*********mask就是PS中的遮罩;********...

  • SplashAnimation

    涉及到的技术点CALayer的mask属性mask 也是一个 CALayer当我们使用时,就需要单独创建一个 CA...

  • 【iOS开发】iOS中的Mask

    CALayer拥有mask属性,Apple的官方解释如下: An optional layer whose alp...

  • Mask动画深入学习

    请下载Demo CALayer有一个属性叫做mask(对应UIView中maskView属性,下文说的maskVi...

网友评论

      本文标题:547,CALayer之mask属性-遮罩(面试点:mask属性

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