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,因为类是动态加载的,只要存在就可以加载。因此如果你的类中没有某个头文件定义,而你确信这个类是可以用的,那么可以用这个方法。
网友评论