使用CAShapeLayer实现画笔

//首先创建一个类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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值