现在好多应有都具备扫码功能,为了减少用户操作,一般会在光线比较暗的时候,自动打开闪光灯:

1、导入头文件

#import <AVFoundation/AVFoundation.h>
#import <ImageIO/ImageIO.h>

2、创建设备、输入输出流

// 1.获取硬件设备AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];// 2.创建输入流AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc]initWithDevice:device error:nil];// 3.创建设备输出流AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];[output setSampleBufferDelegate:self queue:dispatch_get_main_queue()];// AVCaptureSession属性self.session = [[AVCaptureSession alloc]init];// 设置为高质量采集率
    [self.session setSessionPreset:AVCaptureSessionPresetHigh];// 添加会话输入和输出if ([self.session canAddInput:input]) {[self.session addInput:input];}if ([self.session canAddOutput:output]) {[self.session addOutput:output];}// 9.启动会话[self.session startRunning];

3、实现代理方法

#pragma mark - AVCaptureVideoDataOutputSampleBufferDelegate- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL,sampleBuffer, kCMAttachmentMode_ShouldPropagate);NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];CFRelease(metadataDict);NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];float brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue];// brightnessValue 值代表光线强度,值越小代表光线越暗if (brightnessValue <= -2 && !_isAutoOpen) {_isAutoOpen = YES;[self.torchBtn setSelected:YES];[self turnTorchOn:YES];}
}

4、开启关闭闪光灯

// 打开/关闭手电筒
- (void)turnTorchOn:(BOOL)on{if ([self.device hasTorch] && [self.device hasFlash]){[self.device lockForConfiguration:nil];if (on) {[self.device setTorchMode:AVCaptureTorchModeOn];[self.device setFlashMode:AVCaptureFlashModeOn];} else {[self.device setTorchMode:AVCaptureTorchModeOff];[self.device setFlashMode:AVCaptureFlashModeOff];}[self.device unlockForConfiguration];} else {[SSAlertView showWithTitle:@"提示" message:@"当前设备没有闪光灯,不能提供手电筒功能" commitTitle:@"我知道了" cancelTitle:nil commitAction:nil cancelBlock:nil];}
}

转自:http://www.cenzhijun.top/2017/07/自动打开闪光灯/

转载于:https://www.cnblogs.com/xuzb/p/8658261.html

iOS自动打开闪光灯相关推荐

  1. iOS扫码识别【自动拉近放大】(扫描较小二维码地过程中拉近放大图片)【光线暗的时候,能够自动打开闪光灯】

    文章目录 前言 I.搭建一个统一识别二维码的控制器 II.工具方法 QRCodeUtil see also AVMetadataObjectType 前言 先回顾下AVFoundation的扫码原理图 ...

  2. IOS开发调用系统相机和打开闪光灯

    IOS开发调用系统相机和打开闪光灯      今天给大家分享一下如何调用iphone的拍照功能和打开闪光灯,有些代码我也不太理解,很多是在网上借鉴其他人的.IOS有两种的拍照和视频的方式:1.直接使用 ...

  3. 轻松实现网页中通过链接跳转到QQ聊天界面,通过链接加QQ群,自动打开聊天对话框等等,包含电脑版和手机版的实现,示例部分Android和iOS的代码

    通过链接打开对话框: 打开qq聊天窗口的方法 <a href="http://wpa.qq.com/msgrd?v=3&uin=1450612626&site=qq&a ...

  4. iOS 扫描二维码自动打开灯 检测环境光线强度

    扫描二维码自动打开灯 检测环境光线强度,做的不太好,打开灯了没有关闭,后期优化可以打开关闭的代码,并且加一个定时器时间间隔(例如10秒左右)来控制是否改变灯的状态,否则灯会随着光线闪来闪去的.最简单 ...

  5. iOS自动签名打包(xcodebuild)----常用

    iOS自动打包主要用xcodebuild命令, 在终端输入xcodebuild --help可以查看xcodebuild的参数. xcodebuild具体语法: 无workspace的工程 xcode ...

  6. Tomcat Jenkins iOS自动打包

    Tomcat Jenkins iOS自动打包 Jenkins 可以配合测试人员或者 CI 打包,主要作用是提供打包页面选择和参数传递,最后导出 ipa 包. 打包方式有如下几种 借助 Jenkins ...

  7. python项目打包部署到ios_Python iOS 自动打包脚本(包含上传到fir)

    Python iOS自动打包脚本 使用说明 1.1 使用python3编写,没有python3 环境的需要下载python3 python官网下载 1.2 通过Homebrew安装Python3 1. ...

  8. ios 自动打包命令_通过命令行xcodebuild编译打包iOS应用

    点击上方"软件测试精品"关注我们 为什么要自动化打包? iOS编译打包需要签名,测试包又需要连接不同后台服务器,开发人员就需要不断地打开Xcode编译打包成ipa,然后上传到ftp ...

  9. ios怎么打开c语言文件操作函数,C++ ofstream和ifstream详细用法以及C语言的file用法...

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个"流"类为基础的,包括我们 ...

  10. iOS自动打包(敲一下enter键,完成iOS的打包工作)

    原文地址这里写链接内容 参考iOS自动打包并发布脚本这里写链接内容 作为开发人员,免不了要为测试人员打包,让其测试.而打包这个行为是非常无聊的,特别是在每个新版本上线前一两天,总会出现一些莫名其妙的b ...

最新文章

  1. 离职交接文档_如何写好离职工作交接文档?
  2. pandas 绘图 机器学习看特征相关性
  3. 修改AspNetSqlMembershipProvider的密码规则
  4. Java8 中用法优雅的 Stream,性能也优雅吗?
  5. java 静态代码块
  6. JavaScript中BOM操作
  7. 多播报文的发送和接收
  8. 火狐浏览器安装插件步骤
  9. OpenKG开源系列|首个多模态开放知识图谱OpenRichpedia (东南大学)
  10. 多个正则引擎的比较(pcre re2 hyperscan)
  11. easyUI 上传文件
  12. 小米手机Root 刷机
  13. Exch:POP3 和 IMAP4 操作指南
  14. 云计算——交换机基本原理与配置
  15. QT构建编译出现错误error: undefined reference to 的解决办法
  16. java license 验证方案_truelicense实现JAVA的license机制(包括license生成和验证)
  17. oracle中的双精度浮点,双精度扩展格式 (x86)
  18. 将一个数组按照从小到大的顺序排列
  19. geogebra动态数学软件,实用工具
  20. 基于JSP校园二手交易系统的设计与实现

热门文章

  1. 8数码问题-搜索-双向BFS/A*算法
  2. 遇到问题的时候,要学会问问题
  3. 颠覆传统-面向对象的设计思想(序章续)
  4. Java第二节课总结
  5. 快速生成plist文件
  6. 《linux内核完全注释》读书笔记 2
  7. 你能在windows上创建一个叫做AUX的文件夹吗?
  8. 玩玩小爬虫——试搭小架构
  9. Oracle JOB的建立,定时执行任务
  10. 第三章 SQL知识点总结