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

 

转载于:https://www.cnblogs.com/liuw-flexi/p/8918582.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值