CALayer的mask属性

Posted liuw_flexi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CALayer的mask属性相关的知识,希望对你有一定的参考价值。

 

可以对图层按path进行指定裁剪

 

//#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;
    
    CAGradientLayer *bgLayer = [CAGradientLayer layer];
    bgLayer.bounds = CGRectMake(0, 0, 200, 200);
    bgLayer.position        = self.view.center;

    bgLayer.colors = [NSArray arrayWithObjects:
                       (id)[UIColor colorWithRed:0 green:143/255.0 blue:234/255.0 alpha:1.0].CGColor,
                       (id)[UIColor colorWithRed:0 green:173/255.0 blue:234/255.0 alpha:1.0].CGColor,
                       (id)[UIColor whiteColor].CGColor, nil];
    
    
    //创建一个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];
    }
}

@end

 

以上是关于CALayer的mask属性的主要内容,如果未能解决你的问题,请参考以下文章

移动层上的 iOS CALayer.mask

CALayer 蒙版无法正常工作

clip to bounds 和mask to bounds的区别

干货之运用CALayer创建星级评分组件(五角星)

iOS Core Animation之CALayer心得

iOS核心动画之蒙版