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

news/2024/7/8 5:40:34 标签: swift, 摄像头, 图形, 绘制, UIBezierPa

图形">参考:放肆地使用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)
    }

http://www.niftyadmin.cn/n/1557450.html

相关文章

数据库水平切分(Mycat分片路由原理和全局序列号)

2019独角兽企业重金招聘Python工程师标准>>> 分片路由原理 Select * from travelrecord where id in(5000001, 10000001); dn1,dn2,dn3, id5000001这条数据在dn2上&#xff0c;id10000001这条数据在dn3上。 全部扫描一遍dn1 dn2 dn3&#xff0c;结果导致性能浪费。…

js实现 表格框选 并且 变色 (原生js实现在表格用鼠标框选并有反选功能)

原生js实现在表格用鼠标框选并有反选功能 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" cont…

[转]动画黄金搭档:CADisplayLink CAShapeLayer

http://www.cocoachina.com/ios/20161202/18252.html

svn 合并分支 (svn操作手册)

前言&#xff1a; svn是工作中经常用到到代码管理工具&#xff0c;相较于github操作起来相对简单。svn操作手册写的就很清除&#xff0c;可以参考它的步骤操作。 s​​​​vn合并分支 说明 : 合并https://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-dug-merge.ht…

基础补充

2019独角兽企业重金招聘Python工程师标准>>> JavaWeb-10 1. 23种设计模式 2. 自定义注解、 3. 使用动态代理解决网站的字符集编码问题 转载于:https://my.oschina.net/u/3668429/blog/1930134

[iOS 使用xib自定义UIView]

iOS使用xib自定义UIView 1 重写init方法 2 加载Xib中的view (就是这样) NSArray *arr [[NSBundle mainBundle] loadNibNamed:”JFcustomHeadView” owner:self options:nil]; //自定义View - (instancetype)initWithFrame:(CGRect)frame{self [super initWithFrame:fram…

js 实现 输入 年月日 算出 是当年的第几天?

题目&#xff1a; 输入年月日 &#xff0c;求出 是当年的第几天&#xff1f; 1.获取年份 2.判断 年份 是否是 平年和闰年 if (year % 4 0 && year % 100 ! 0 || year % 400 0) { //闰年isyear 29;} else {isyear 28; //平年} 3.根据月份 &#xff0c;区分大小月…

区块链和数据库,技术到底有何区别?

2019独角兽企业重金招聘Python工程师标准>>> 关于数据库和区块链&#xff0c;总会有很多的困惑。区块链其实是一种数据库&#xff0c;因为他是数字账本&#xff0c;并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是&#xff0c;区块链是数据…