iOS 7.1 imagePicker CameraFlashMode未指示Flash状态

Eli*_*ktz 12 uiimagepickercontroller ios ios-camera ios7 ios7.1

我有iPhone应用程序覆盖相机与自定义视图.我有一个按钮在相机闪光模式之间切换,这是代码

switch ([self.imagePickerController cameraFlashMode]) {
    case UIImagePickerControllerCameraFlashModeAuto:
        [self.imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];
        return @"On";
        break;

    case UIImagePickerControllerCameraFlashModeOn:
        [self.imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOff];
        return @"Off";
        break;

    case UIImagePickerControllerCameraFlashModeOff:
        [self.imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeAuto];
        return @"Auto";
        break;

    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:在iOS 7.0x上工作得很好,但在iOS 7.1中,cameraFlashMode属性返回UIImagePickerControllerCameraFlashModeAuto,无论其真实状态如何.

闪光模式确实发生了变化,但我没有注意到这一点.有线索吗?谢谢

dai*_*dai 12

我这样解决了:

@property (nonatomic) NSInteger flashMode;

if (_flashMode == UIImagePickerControllerCameraFlashModeAuto)
{
    _flashMode = UIImagePickerControllerCameraFlashModeOff;
}
else if (_flashMode == UIImagePickerControllerCameraFlashModeOff)
{
    _flashMode = UIImagePickerControllerCameraFlashModeOn;
}
else if (_flashMode == UIImagePickerControllerCameraFlashModeOn)
{
    _flashMode = UIImagePickerControllerCameraFlashModeAuto;
}

_cameraPicker.cameraFlashMode = (UIImagePickerControllerCameraFlashMode)_flashMode;
Run Code Online (Sandbox Code Playgroud)


klc*_*r89 5

好的,所以我非常详细地研究了这个,并在网上偶然发现了这篇有用的文章:

http://www.c2itconsulting.com/2013/10/ios-flash-setting-on-camera-picker-only-available-after-view-is-displayed/

我接受了他们的建议,现在我在用户拍照之前设置了闪光灯设置.我没有检查相机的当前闪光设置是什么,而是检查我的闪光按钮的titleLabel文本以查看用户想要的闪光设置:

这是我提出的代码,它现在完美地解决了我的问题.我希望这可以帮助你解决iOS 7.0上不存在的同样问题,但现在在iOS 7.1上也是如此.

#define deviceHasCameraFlash [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear]

- (void)capturePhoto
{
    if (self.cameraDevice != UIImagePickerControllerCameraDeviceFront && deviceHasCameraFlash)
    {
        if ([self.flashButton.titleLabel.text isEqualToString:@"Auto"])
        {
            self.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
        }
        else if ([self.flashButton.titleLabel.text isEqualToString:@"Off"])
        {
            self.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
        }
        else if ([self.flashButton.titleLabel.text isEqualToString:@"On"])
        {
            self.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
        }
    }

   [self takePicture];
}
Run Code Online (Sandbox Code Playgroud)