QuartzCore - 绘图
CAShapeLayer
在这个上面画UIBezierPath曲线,然后add到任意的View上!灰常方便。本身也灰常方便。使用与UIBezierPath,类似,还能带动画!
绘制路径 - UIBezierPath 话个path 就好了
不多提了。看UIKit - UIBezierPath。只需要路径,属性什么不要设置,shapeLayer自己设置。其实差不多的。设置 shapeLayer
// 创建一个shapeLayer
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame = self.view.bounds;
layer.path = path.CGPath; // 从贝塞尔曲线获取到形状
layer.lineWidth = 1.0f; // 线条宽度
layer.strokeColor = [UIColor redColor].CGColor; // 边缘线的颜色
layer.miterLimit = 2.;
layer.lineDashPhase = 10;// 未知?
layer.lineDashPattern = @[@3,@10];// 虚线
layer.fillColor = [UIColor greenColor].CGColor; // 闭环填充的颜色
layer.fillRule = kCAFillRuleNonZero;
/*
CA_EXTERN NSString *const kCAFillRuleNonZero
CA_EXTERN NSString *const kCAFillRuleEvenOdd
*/
layer.lineCap = kCALineCapSquare; // 边缘线的类型
/*
CA_EXTERN NSString *const kCALineCapButt
CA_EXTERN NSString *const kCALineCapRound
CA_EXTERN NSString *const kCALineCapSquare
*/
layer.lineJoin = kCALineJoinRound;
/*
CA_EXTERN NSString *const kCALineJoinMiter
CA_EXTERN NSString *const kCALineJoinRound
CA_EXTERN NSString *const kCALineJoinBevel
*/
// 结合 CABasicAnimation 可以变成 动画绘制
// 将layer添加进图层
[self.view.layer addSublayer:layer];
- 其他
@property CGFloat strokeStart;
@property CGFloat strokeEnd;
@property CGFloat lineDashPhase;
CADisplayLink
与屏幕帧率一致,正常每秒 60 次调用,卡就会变少。
- 初始化
- (void)testAction {
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(test:)];
displayLink.frameInterval = 5;// 每 多少针调用一次方法
// 注意需要加入到 runloop
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)test:(CADisplayLink *)display {
NSLog(@"%f,%f",display.timestamp,display.duration);// 时间戳,与 每针时间
}
- 其他
// 暂停 继续
[displayLink setPaused:![displayLink isPaused]];
// 移除
[displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
// 销毁
[displayLink invalidate];