[iOS Swift3.0] 定位二维码+绘制定位框+简单使用UIBezierPath和CAShapeLayer

来源:互联网 发布:dwg是什么软件 编辑:程序博客网 时间:2024/05/01 14:09

参考:放肆地使用UIBezierPath和CAShapeLayer画各种图形

1.获取摄像头拍摄数据

在AVCaptureMetadataOutputObjectsDelegate代理方法中处理

  func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {     //1获取扫描到的数据        guard let obj = metadataObjects.last as? AVMetadataMachineReadableCodeObject            else{                return        }        //2 获取二维码位置        //2.1 转换corners 坐标        let objCorners = previewLayer.transformedMetadataObject(for: obj)        //2.2 绘制图形绿框        drawCorners(objCorners: objCorners as! AVMetadataMachineReadableCodeObject)}

drawCorners(objCorners:AVMetadataMachineReadableCodeObject) 绘制方法实现

    /// 绘制绿色框(Bethel曲线)    ///    /// - parameter objCorners: 保存了坐标的 AVMetadataMachineReadableCodeObject 对象    private func drawCorners(objCorners :AVMetadataMachineReadableCodeObject){        if objCorners.corners.isEmpty{            return        }        //1.新建layer        let layer = CAShapeLayer()        layer.lineWidth = 4        layer.strokeColor = UIColor.green.cgColor        layer.fillColor = UIColor.clear.cgColor        //2.创建贝塞尔路径        let path = UIBezierPath()        var point = CGPoint.zero        var index : Int = 0        //2.1从corners数组中开始取point坐标        point = CGPoint.init(dictionaryRepresentation: objCorners.corners[0] as! CFDictionary)!        //2.2 移动到起始点        path.move(to: point)        while index < objCorners.corners.count{            point = CGPoint.init(dictionaryRepresentation: objCorners.corners[index] as! CFDictionary)!            index += 1            //2.3 点添加成路径线            path.addLine(to: point)        }        //2.4 关闭路径        path.close()        //2.5 绘制路径        layer.path = path.cgPath        //3.将创建好的layer添加到drawLayer上去        drawlayer.addSublayer(layer)    }
0 0
原创粉丝点击