• iOS


    • 导入框架 #import <AVFoundation/AVFoundation.h>
    • 设置属性: ViewController
    @interface ViewController ()
    
    /// 获取设备
    @property (nonatomic, strong) AVCaptureDevice *device;
    /// 手电筒是否开启
    @property (nonatomic,assign) BOOL lightOn;
    
    @end
    
    • 获取硬件以及判断手电筒是否可用:
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        /**
         *  hasTorch :返回YES表名手机上有手电筒
         */
        if (![_device hasTorch]) {
            NSLog(@"手电筒坏了,赶紧换一个iPhone8吧!!!");
            return;
        }
        
    }
    
    
    • 设置开关手电筒的一个方法:clickBtn2:
    - (IBAction)clickBtn2:(id)sender {
        
        _lightOn = !_lightOn;
        //根据ligthOn状态判断打开还是关闭
        // torchLevel
        if (_lightOn) {
            //开启手电筒
            [_device lockForConfiguration:nil];
            [_device setTorchMode:AVCaptureTorchModeOn];
            
            // 设置手电筒torchLevel(亮度)数值必须在0~1之间,如果设备过热可能会抛出异常并且不能启动
            // 范围 0 - 1 不能是0,应该是(0,1] 左开右闭区间取值,设置数值以前先lock(lockForConfiguration), 设置完毕后一定unlock(unlockForConfiguration)否则崩溃,解决机子过热或者设置导致的崩溃最好的设置方式@try...@catch...@finally捕获异常防止崩溃
            [_device setTorchModeOnWithLevel:0.01 error:nil];
            [_device unlockForConfiguration];
            
        }else{
            //关闭手电筒
            [_device lockForConfiguration:nil];
            [_device setTorchMode:AVCaptureTorchModeOff];
            [_device unlockForConfiguration];
            
        }
    }
    
    • 设置手电筒亮度的一个方法: clickBtn1
    /// 设置亮度
    - (IBAction)clickBtn1:(id)sender {
        [_device lockForConfiguration:nil];
        [_device setTorchModeOnWithLevel:1 error:nil];
        [_device unlockForConfiguration];
    }
    

    注意:
    1. 可能由于玩游戏之类原因手机过热导致打开手电筒失败,最终导致崩溃.
    2. 设置手电筒的亮度前要 lockForConfiguration
    3. 设置手电筒完毕后要 unlockForConfiguration
    4. 最好的办法用@try...@catch...@finally捕获异常防止崩溃.

  • 相关阅读:
    Halcon算子翻译——else
    Halcon算子翻译——default
    halcon算子翻译——continue
    Halcon算子翻译——catch
    Halcon算子翻译——case
    生命周期
    输入流输出流
    在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。
    给你一个网站,你如何测试?
    你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
  • 原文地址:https://www.cnblogs.com/adampei-bobo/p/7444237.html
Copyright © 2020-2023  润新知