//首先创建一个类BHBPaintPath用于描绘绘图路径
class BHBPaintPath: UIBezierPath {
func paintPathWithLineWidth(_ width:CGFloat,startPoint:CGPoint) -> AnyObject{
self.lineWidth = width
self.lineCapStyle = CGLineCap.round//线条拐点
self.lineJoinStyle = CGLineJoin.round//终点处理
self.move(to: startPoint)
returnself
}
//在创建一个继承于UIView的类用于展示画板
class DrawView: UIView {
var width:CGFloat =3
var lines = [CAShapeLayer]()
var cancelLines = [CAShapeLayer]()
var path:BHBPaintPath!
var shapeLayer:CAShapeLayer!
var color:UIColor = UIColor.black
//点击屏幕时开始记录绘图位置
overridefunc touchesBegan(_ touches:Set<UITouch>, with event:UIEvent?) {
let startPoint = touches.first?.location(in:self)
let path = BHBPaintPath()
path.paintPathWithLineWidth(width, startPoint: startPoint!)
self.path = path
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.backgroundColor = UIColor.clear.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = color.cgColor
shapeLayer.lineWidth = path.lineWidth
self.layer.addSublayer(shapeLayer)
self.shapeLayer = shapeLayer
lines.append(shapeLayer)
}
//手指在屏幕上移动时捕获绘图路径
overridefunc touchesMoved(_ touches:Set<UITouch>, with event:UIEvent?) {
let movePoint = touches.first?.location(in:self)
self.path.addLine(to: movePoint!)
self.shapeLayer.path =self.path.cgPath
}
}
最后在ViewCOntroller创建DrawView就可以了
Demo链接
https://github.com/MrLinTianbao/CAShapeLayer.git