美文网首页iOS
iOS 开发 用代码打开手电筒

iOS 开发 用代码打开手电筒

作者: 番茄炒西红柿啊 | 来源:发表于2016-12-06 14:57 被阅读1270次

    iOS 开发 用代码打开手电筒

    分类:iOS

    最近项目中有扫描二维码的功能,我想添加一个打开手电筒的操作,实现过程如下:

    在项目中导入 AVFoundation.framework 依赖库,在实现类中导入头文件

    #import

    实现代码如下:

    #pragma mark - event response

    //打开手电筒开关按钮点击事件

    - (void)torchOnTouchButton:(UIButton*)sender{

             Class captureDeviceClass =NSClassFromString(@"AVCaptureDevice");

             if(captureDeviceClass !=nil) {

                      AVCaptureDevice*device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

                      if([devicehasTorch]) { // 判断是否有闪光灯

                                // 请求独占访问硬件设备

                               [devicelockForConfiguration:nil];

                               if(sender.tag==0) {

                               sender.tag=1;

                               [devicesetTorchMode:AVCaptureTorchModeOn];//手电筒开

                      }else{

                                sender.tag=0;

                                [devicesetTorchMode:AVCaptureTorchModeOff]; // 手电筒关

                      }

                     // 请求解除独占访问硬件设备

                     [deviceunlockForConfiguration];

                     }

              }

    }

    // 上面用到了NSClassFromString(NSString*aClassName)解释一下:

    FOUNDATION_EXPORTClass__nullableNSClassFromString(NSString*aClassName); 这是Xcode上的源码

    如果你要获取的类不存在,则会返回一个nil对象,程序不会崩溃,适用于进行你不确定类的初始化。

    NSClassFromString的好处是:

    1.弱化链接,不会把没有的框架也链接到程序中。

    2.不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的类中没有某个头文件定义,而你确信这个类是可以用的,那么可以用这个方法。

    相关文章

      网友评论

        本文标题:iOS 开发 用代码打开手电筒

        本文链接:https://www.haomeiwen.com/subject/oqdrmttx.html