iOS 開發(fā) 用代碼打開手電筒
分類:iOS
最近項目中有掃描二維碼的功能,我想添加一個打開手電筒的操作,實現(xiàn)過程如下:
在項目中導(dǎo)入?AVFoundation.framework 依賴庫,在實現(xiàn)類中導(dǎo)入頭文件
#import
實現(xiàn)代碼如下:
#pragma mark - event response
//打開手電筒開關(guān)按鈕點擊事件
- (void)torchOnTouchButton:(UIButton*)sender{
? ? ? ? ?Class captureDeviceClass =NSClassFromString(@"AVCaptureDevice");
? ? ? ? ?if(captureDeviceClass !=nil) {
? ? ? ? ? ? ? ? ? AVCaptureDevice*device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
? ? ? ? ? ? ? ? ? if([devicehasTorch]) { // 判斷是否有閃光燈
? ? ? ? ? ? ? ? ? ? ? ? ? ? // 請求獨占訪問硬件設(shè)備
? ? ? ? ? ? ? ? ? ? ? ? ? ?[devicelockForConfiguration:nil];
? ? ? ? ? ? ? ? ? ? ? ? ? ?if(sender.tag==0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ?sender.tag=1;
? ? ? ? ? ? ? ? ? ? ? ? ? ?[devicesetTorchMode:AVCaptureTorchModeOn];//手電筒開
? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? sender.tag=0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? [devicesetTorchMode:AVCaptureTorchModeOff]; // 手電筒關(guān)
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ?// 請求解除獨占訪問硬件設(shè)備
? ? ? ? ? ? ? ? ?[deviceunlockForConfiguration];
? ? ? ? ? ? ? ? ?}
? ? ? ? ? }
}
// 上面用到了NSClassFromString(NSString*aClassName)解釋一下:
FOUNDATION_EXPORTClass__nullableNSClassFromString(NSString*aClassName); 這是Xcode上的源碼
如果你要獲取的類不存在,則會返回一個nil對象,程序不會崩潰,適用于進(jìn)行你不確定類的初始化。
NSClassFromString的好處是:
1.弱化鏈接,不會把沒有的框架也鏈接到程序中。
2.不需要使用import,因為類是動態(tài)加載的,只要存在就可以加載。因此如果你的類中沒有某個頭文件定義,而你確信這個類是可以用的,那么可以用這個方法。