iOS 开发 用代码打开手电筒

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 开发 用代码打开手电筒)