iOS结合CADisplayLink,UIBezierPath和CAShapeLayer

什么是CADisplayLink

    CADisplayLink 和NSTimer一样,也是一种定时器,不过它的触发频率和屏幕的刷新频率相同,它可以以屏幕的频率将内容显示到屏幕上。适合用来做界面的不停重绘。

用法如下:

CADisplayLink *myLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(dislinkAction)];]

[myLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

什么是UIBezierPath

UIBezierPath属于CoreGraphics,使用它可以完成大部分的绘图操作。基本用法可以参考这里,这次demo,就是用贝塞尔曲线画出path,然后赋给CAShapeLayer。

什么是CAShapeLayer

什么是layer。CAShapeLayer是layer的子类,但是他们的不同之处在于,layer的默认形状为矩形,而CAShapeLayer没有默认形状,必须给定一个path

CAShapeLayer与UIBezierPath的结合参考这里。

这个是模仿做的demo,不过里面是通过drawrect画的,现在用CAShapeLayer来试一下。

iOS结合CADisplayLink,UIBezierPath和CAShapeLayer_第1张图片
效果图

实现

CAShapeLayer *layer = [CAShapeLayer layer];//初始化layer

layer.frame = frame;

layer.strokeColor = [UIColor greenColor].CGColor;

layer.fillColor = [UIColor blueColor].CGColor;

layer.lineCap = kCALineCapSquare;

layer.lineWidth = 4.0;

layer.strokeStart = 0;

layer.strokeEnd = 0.1;

layer.speed = 0.1;

layer.strokeStart = 0.0;

layer.strokeEnd = 1.0;

layer.lineWidth = 1;

myLayer = layer;

[self.view.layer addSublayer:layer];


CGPoint controlPoint = CGPointMake(width / 2,frame.origin.y +  H);

[path addQuadCurveToPoint:CGPointMake(width, frame.origin.y) controlPoint:controlPoint];//上面那条曲线

[path addLineToPoint:CGPointMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];

[path addLineToPoint:CGPointMake(0.0, [UIScreen mainScreen].bounds.size.height)];//两条边

[path closePath]

myLayer.path = path.CGPath;然后把path赋给layer就可以了

DEMO地址

你可能感兴趣的:(iOS结合CADisplayLink,UIBezierPath和CAShapeLayer)