import<AVFoundation/AVFoundation.h>//打开手电筒 需要框架
//按钮触发方法
-(void)flashlightButtonAction:(UIButton *)button
{
NSLog(@"打开手电筒");
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if(captureDeviceClass != nil) {
AVCaptureDevice*device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([device hasTorch]) { // 判断是否有闪光灯
// 请求独占访问硬件设备
[device lockForConfiguration:nil];
if(!button.selected) {
[device setTorchMode:AVCaptureTorchModeOn];//手电筒开
}else{
[device setTorchMode:AVCaptureTorchModeOff]; // 手电筒关
}
// 请求解除独占访问硬件设备
[device unlockForConfiguration];
}
}
button.selected = !button.selected;
}
// 上面用到了NSClassFromString(NSString*aClassName) 做一下记录
FOUNDATION_EXPORT Class _Nullable NSClassFromString(NSString *aClassName);
如果你要获取的类不存在,则会返回一个nil对象,程序不会崩溃,适用于进行你不确定类的初始化。
NSClassFromString应用
通过字符串拿到类对象 如果拿不到则是nil
有的时候做一些页面的po判断
//拿到AViewController这个类对象
Class tempVC = NSClassFromString(@"AViewController");
for (UIViewController *controller in self.navigationController.viewControllers) {
//遍历中做判断 有tempVC时 pop返回
if ([controller isKindOfClass:tempVC]) {
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
网友评论