iOS 横屏原生二维码扫描 swift
来源:互联网 发布:添加hp打印机 usb端口 编辑:程序博客网 时间:2024/06/04 08:57
需求:做一个横屏的二维码,条形码读取器,摄像头可以选择后置,前置摄像头(居然还有前置,好别扭。。)
- 添加AVFoundation库
import AVFoundation
- 获取设备
let deviceArr = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo); print("\(deviceArr)");
打印出来的内容是:
[<AVCaptureFigVideoDevice: 0x14ece560 [Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0]>, <AVCaptureFigVideoDevice: 0x14da17c0 [Front Camera] [com.apple.avfoundation.avcapturedevice.built-in_video:1]>]
可以看到数组里有两个设备,Back Camera , Front Camera,前置,后置摄像头。然后就可以选择我们需要的设备。
for temp in deviceArr { let item = temp as! AVCaptureDevice; if item.position == .Back {// 选取后置摄像头//在这里加入后续代码 } }
- 创建输入输出,并设置代理
//代理class ScanVC: UIViewController,AVCaptureMetadataOutputObjectsDelegate
do{// 创建输入 let input = try AVCaptureDeviceInput(device: item);// 创建输出 let output = AVCaptureMetadataOutput();// 设置代理,在主线程里刷新 output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue());//。。。。。。。。 }catch{ }
- 链接对象
// 初始化链接对象 session = AVCaptureSession();// 采集率的质量 session.sessionPreset = AVCaptureSessionPresetHigh;// 添加输入和输出 session.addInput(input); session.addOutput(output);// 设置支持的编码格式 let typeArr = output.availableMetadataObjectTypes; print("本设备所支持的编码格式 = \(typeArr)"); output.metadataObjectTypes = [AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeQRCode]; let layer = AVCaptureVideoPreviewLayer(session: session); layer.videoGravity = AVLayerVideoGravityResizeAspectFill;//***设置图像输出的方向 ,如果横屏的时候不设置这个属性,拍出的图像会90度角旋转 layer.connection.videoOrientation = .LandscapeLeft; layer.frame = self.view.bounds; self.view.layer.insertSublayer(layer, atIndex: 0); session.startRunning();
metadataObjectTypes,对于所有的编码格式,可以看下面的图。
- 代理,读取二维码的内容
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { if metadataObjects.count > 0 { session.stopRunning(); let metadataObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject; print("\(metadataObject.stringValue)"); } }
- 扫描区域的设置
output.rectOfInterest = CGRectMake( (screenWidth - 260) / 2 / screenWidth, (screenHeight - 200) / 2 / screenHeight, 260 / screenWidth, 200 / screenHeight);/*! @property rectOfInterest @abstract Specifies a rectangle of interest for limiting the search area for visual metadata. @discussion The value of this property is a CGRect that determines the receiver's rectangle of interest for each frame of video. The rectangle's origin is top left and is relative to the coordinate space of the device providing the metadata. Specifying a rectOfInterest may improve detection performance for certain types of metadata. The default value of this property is the value CGRectMake(0, 0, 1, 1). Metadata objects whose bounds do not intersect with the rectOfInterest will not be returned. */@property(nonatomic) CGRect rectOfInterest NS_AVAILABLE_IOS(7_0);
参数的范围都是0-1,前两个是设置范围的坐标原点,后两个是范围大小。对于Landscape Left,屏幕的左下角是起始的原点。比如(0.5,0,0.5,0.5),扫描区域是屏幕左下角1/4的区域。如果是(0,0.5,1.0,0.5)扫描区域是屏幕上半部分。
代码下载 : 代码下载
0 0
- iOS 横屏原生二维码扫描 swift
- iOS原生二维码扫描
- iOS 原生二维码扫描
- iOS:原生二维码扫描
- iOS原生二维码扫描
- iOS原生扫描二维码
- ios原生二维码扫描
- iOS:原生二维码扫描
- ios原生二维码扫描
- iOS 原生二维码扫描
- iOS 原生二维码扫描
- iOS 原生扫描二维码
- iOS原生二维码扫描
- iOS原生二维码扫描白屏问题
- IOS原生API扫描二维码
- iOS原生二维码扫描(一)
- iOS原生二维码扫描(二)
- iOS 之原生扫描二维码
- 使用C# .net开发微信公众号之设置所属行业
- Android6.0仿微信权限设置
- JUnit 软检测试笔记(注意事项)
- Think In Java 笔记6 Inner Classes
- Android内部存储
- iOS 横屏原生二维码扫描 swift
- Spark在shuffle数据的时候遇到的问题:java.io.IOException: Connection reset by peer
- 3.shell编程(3) ---传参
- android IPC机制(一)
- javaScript 笔记 (二)变量 和 数据类型
- springMVC处理器映射
- Think In Java 笔记7 Holding Your Objects
- ios编译c++文件
- POJ 2289 Jamie’s Contact Groups-二分匹配&多重匹配