Swift 3.0 Xcode 8.0 分离的代码,不能直接运行

import UIKit
import AVFoundation

class SaomaViewController: UIViewController,AVCaptureMetadataOutputObjectsDelegate {

    // 扫描相关字段
    var avSession:AVCaptureSession!
    var avInput:AVCaptureDeviceInput!
    var avOutput:AVCaptureMetadataOutput!
    var avLayer:AVCaptureVideoPreviewLayer!

    let mainFrame = UIScreen.main.bounds
    // 扫描区域的
    var scanRect:CGRect!
    var imgScan:UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let scanWidth:CGFloat = 250
        let scanTop:CGFloat = 100
        let scanLeft:CGFloat = (mainFrame.width - scanWidth) / 2
        // 第一件事,就是确定扫描的位置
        scanRect = CGRect(x: scanLeft,y: scanTop,width: scanWidth,height: scanWidth)
        // 扫描的边框
        let imgViewBorder = UIImageView(frame: scanRect)
        imgViewBorder.loadImage(named: "saomaBorder")
        self.view.addSubview(imgViewBorder)

        // 创建扫描的遮罩
        createallMask()

        // 创建动画
        createScanAnimat()
        // 开始扫描操作
        initScan()

        let lbTips = UILabel()
        lbTips.text = "放入框中,自动扫描"
        lbTips.font = UIFont.systemFont(ofSize: 15)
        lbTips.textColor = UIColor.white

        lbTips.frame = Jiajiao.SW.cgRect(0,0,200,20)
        lbTips.textAlignment = .center
        lbTips.center = CGPoint(x: self.view.center.x,y: scanTop + scanWidth
            + 30)

        self.view.addSubview(lbTips)
    }

    // 创建扫描动画
    func createScanAnimat() {
        let viewWrap = UIView()
        viewWrap.frame = scanRect
        self.view.addSubview(viewWrap)

        imgScan = UIImageView()
        imgScan.loadImage(named: "scan_light")
        imgScan.frame = Jiajiao.SW.cgRect(1,1,scanRect.size.width - 2,5)
        viewWrap.addSubview(imgScan)
        scanAnimation()
    }

    func scanAnimation() {
        UIView.animate(withDuration: 2.5,delay: 0,options: UIViewAnimationoptions.curveLinear,animations: {
            self.imgScan.frame = Jiajiao.SW.cgRect(1,self.scanRect.size.height - 6,self.scanRect.size.width - 2,5)
        }) { (b) in
            if b {
                self.imgScan.frame = Jiajiao.SW.cgRect(1,5)
                self.scanAnimation()
            }
        }
    }

    func initScan() {

        // 检测权限
        let deviceAuth = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)
        // 会直接退出当前页面
        if deviceAuth == AVAuthorizationStatus.denied || deviceAuth == AVAuthorizationStatus.restricted {
            // 请在iPhone的“设置-隐私-相机”中允许访问相机
            })
        }

        // 建立连接
        avSession = AVCaptureSession()
        avSession.sessionPreset = AVCaptureSessionPresetHigh

        do {
            let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
            avInput = try AVCaptureDeviceInput(device: device)

            avSession.addInput(avInput)

            avOutput = AVCaptureMetadataOutput()
            avSession.addOutput(avOutput)

            avOutput.setMetadataObjectsDelegate(self,queue: dispatchQueue.main)
            avOutput.MetadataObjectTypes = avOutput.availableMetadataObjectTypes

            avLayer = AVCaptureVideoPreviewLayer(session: self.avSession)
            avLayer.frame = self.view.frame
            self.view.layer.insertSublayer(avLayer,at: 0)

            let x = scanRect.origin.y / self.view.frame.size.height
            let y = scanRect.origin.x / self.view.frame.size.width
            let w = scanRect.size.height / self.view.frame.size.height
            let h = scanRect.size.width / self.view.frame.size.width

            self.avOutput.rectOfInterest = Jiajiao.SW.cgRect(x,y,w,h)

            avSession.startRunning()

        } catch {
            print(error)
        }
    }

    func createallMask() {
        // 围着扫描框四周创建半透明遮罩,只漏出扫描框
    }

    func captureOutput(_ captureOutput: AVCaptureOutput!,didOutputMetadataObjects MetadataObjects: [Any]!,from connection: AVCaptureConnection!) {

        if MetadataObjects.count > 0 {

            self.avSession.stopRunning()

            guard let mm = MetadataObjects.first as? AVMetadataMachineReadableCodeObject else {
                // 扫描失败,请重新扫描
                return
            }
        }
    }
}

Swift3.0扫描条形码和二维码实例的更多相关文章

  1. ios – 如何在父视图上添加子视图控制器的视图

    再现.从而:

  2. ios – 实例化ViewController w / xib时的帧大小不正确

    我有一个视图控制器,看起来像:当我通过让spotViewController=SpotViewController实例化视图控制器并将其推送到导航控制器时,结果框架在viewDidLoad和viewWillAppear中都是不正确的.它给了我这是界面构建器中的大小.为什么会发生这种情况以及使用xib实例化视图控制器以确保帧正确的正确方法是什么?解决方法这将解决您的问题,UIViewController从xib加载,在viewDidLoad期间保持xib大小:

  3. ios – CAGradientLayer不工作

    参见英文答案>DrawinggradientonUIViewnotworkingwithiOS91个我创建了一个新项目.我链接了QuartzCore.framework并导入了在ViewController.m中.这是代码.我尝试将视图的背景颜色设置为clearColor,在viewDidAppear中调用它,但它们都没有工作.我真的不知道自己错过

  4. ios – AVCaptureSession条形码扫描

    解决方法以下是我所拥有的项目代码示例,可以帮助您走上正确的轨道

  5. ios – MonoTouch,ZXing:呈现ZXingScannerViewController失败

    因此,在我的应用程序开始时,用户必须能够扫描QR码.在应用程序设置中,用户可以扫描另一个条形码以更改设置中的某些数据.在我的应用程序开始扫描仪工作正常,但当我尝试扫描settingsVC中的条形码时,我得到以下警告:我已经尝试在viewDidAppear上调用扫描,但是我得到了相同的警告.编辑:试图使用没有异步的条形码扫描仪,但我仍然得到相同的消息.我也尝试使用AVFoundation导致同样的错

  6. Swift 简单控件示例:活动指示器UIActivityIndicatorView

    转载请声明出处:http://www.jb51.cc/article/p-fycefhzj-ga.html---------------------------------------------------------------------------------------------------------------------------------------------------

  7. Swift 文本编辑时将文本框上移

  8. UIScrollView加载子视图偏移64的问题

    最近正在学swift,基本语法刚刚看完,试着实践一下。没想到用scrollView的时候遇到问题了。o(╯□╰)o在一个VC里如果第一个控件是UIScrollView,注意是第一个控件,就是首先addsubview在VC.view上。接着加到scrollView上的View就会在Y点上发生64的偏移。这个在iOS7以后才会出现。如果这个scrollView不是第一个加到self.view上的。

  9. AutoLayout Swift demo

    importUIKitimportSwiftclassViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()letv1=UIView()letv2=UIView()v1.backgroundColor=UIColor.redColor()v2.backgroundColor=UIColor.blue

  10. Swift UIView 常用添加方法

    Swift添加UIView有几种常见方法首先addSubview最常见就是普通的添加我们看下效果解析来我们获取一下self.view的子视图,然后就知道刚才添加的两个视图的index结果为4,那么view1index为2,view2的index为3下来我们看下这个方法insertSubview(view:UIView,atIndexindex:Int)将view添加上来效果如下我们可以看到blue

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部