iOS结合CADisplayLink,UIBezierPath和
什么是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来试一下。
效果图实现
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就可以了