12

I have iPhone application which overlays the camera with custom view. I have a button to switch between camera flash mode, this is the code

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;
}

This is my problem: Worked perfectly fine on iOS 7.0x, but in iOS 7.1 the cameraFlashMode property returns UIImagePickerControllerCameraFlashModeAuto regardless of its real state.

The flash mode does change, but i get no indication of that. Any clues? Thanks

4

4 に答える 4

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];
}
于 2014-03-23T02:37:18.760 に答える
0

上記の答えは、iOS 7.1 @daidai ではうまくいきませんでした。

あなたの.hファイルで、プロパティflashMode

- (void)didTapFlash:(id)sender
{



    if (self.flashMode == UIImagePickerControllerCameraFlashModeAuto) {
        //toggle your button to "on"
        [self.imagePicker setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];
        [self.flashButton setImage:[UIImage imageNamed:@"flashOn"] forState:UIControlStateNormal];
         self.flashMode = UIImagePickerControllerCameraFlashModeOn;

        NSLog(@"On state: %d", self.flashMode);
    }else if (self.flashMode == UIImagePickerControllerCameraFlashModeOn){
        //toggle your button to "Off"
        [self.imagePicker setCameraFlashMode:UIImagePickerControllerCameraFlashModeOff];
        [self.flashButton setImage:[UIImage imageNamed:@"flashOf"] forState:UIControlStateNormal];
        self.flashMode = UIImagePickerControllerCameraFlashModeOff;

        NSLog(@"Of state: %d", self.flashMode);
    }else if (self.flashMode == UIImagePickerControllerCameraFlashModeOff){
        //toggle your button to "Auto"
        [self.imagePicker setCameraFlashMode:UIImagePickerControllerCameraFlashModeAuto];
        [self.flashButton setImage:[UIImage imageNamed:@"flashAuto"] forState:UIControlStateNormal];
         self.flashMode = UIImagePickerControllerCameraFlashModeAuto;

        NSLog(@"Auto state: %d", self.flashMode);
    }
}
于 2014-08-02T11:59:58.727 に答える