iOS 10 相机闪光灯 ON/OFF 不工作

iOS 10 Camera flash ON/OFF not working

最多 iOS 9 闪光开/关/自动工作正常。但是在 iOS 10 flash 中不工作。

    self.camObj = [[UIImagePickerController alloc] init];

    [self addCameraToTheScreen];
    NSArray *mediaTypes = [NSArray arrayWithObject:(NSString*)kUTTypeMovie];
    self.camObj.mediaTypes = mediaTypes ;
    self.camObj.modalTransitionStyle = UIModalPresentationFullScreen;
    self.camObj.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.camObj.videoMaximumDuration = 10.0f;
    self.camObj.showsCameraControls = NO;
    self.camOptionsView.frame = [UIScreen mainScreen].bounds;
    self.camObj.delegate = (id<UIImagePickerControllerDelegate,UINavigationControllerDelegate>)self;
    [self.camObj setCameraOverlayView:self.camOptionsView];

并以编程方式更改闪存模式。

 [self.camObj setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];

有报道称第 3 方更换部件会导致这些症状,尤其是关于 phone needing to cool down and the camera / flash not working 的消息。 phone 上的固件也可能会检查内置部件是否为正品,如果检测到非 Apple 硬件,这也可能导致这些问题。

这是 iOS 10(至少从 10.0.2 开始)的错误。请注意,如果 showsCameraControls 已打开,设置 cameraFlashMode 起作用。

这是一个 iOS 10 错误,因此您需要继承 UIImagePickerController 并覆盖 cameraFlashMode setter:

 - (void)setCameraFlashMode:(UIImagePickerControllerCameraFlashMode)cameraFlashMode {
     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10 && !self.showsCameraControls) {
         self.showsCameraControls = YES;
         super.cameraFlashMode = cameraFlashMode;
         self.showsCameraControls = NO;
     } else {
         super.cameraFlashMode = cameraFlashMode;
     }
 }

对于iOS10,先尝试渲染UIImagePickerController,再设置相机闪光灯。尝试

[self presentViewController:self.camObj animated:YES completion:^{
    //For iOS 10 and higher versions so it can set the proper flashmode
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10) {
       [self.camObj setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];
    }
}];

希望这对您有所帮助。

问题已在 iOS 10.2 上解决。 现在手动相机闪光模式处理再次正常工作,无需启用和禁用 showsCameraControls。