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
此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935.
我的gitHub: (学习代码都在gitHub)
https://github.com/nwgdegitHub/