문제

This is my code to change the flash mode on iphone.

In ios7.0 works: flashmode(0,1,-1)

In ios7.1 don't works: flashmode(0,0,0)

//UIImagePickerControllerCameraFlashModeOff  = -1,
//UIImagePickerControllerCameraFlashModeAuto = 0,
//UIImagePickerControllerCameraFlashModeOn   = 1

NSInteger flashMode = self.pickerReference.cameraFlashMode;

NSLog(@"flashmode %i",flashMode);

if (flashMode == UIImagePickerControllerCameraFlashModeAuto) {
    [(UIButton *)sender setImage:[UIImage imageNamed:@"flashYesComposeButton.png"] forState:UIControlStateNormal];
    self.pickerReference.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
}

else if (flashMode == UIImagePickerControllerCameraFlashModeOn) {
    [(UIButton *)sender setImage:[UIImage imageNamed:@"flashNoComposeButton.png"] forState:UIControlStateNormal];
    self.pickerReference.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
}

else if (flashMode == UIImagePickerControllerCameraFlashModeOff)
{
    [(UIButton *)sender setImage:[UIImage imageNamed:@"flashAutoComposeButton.png"] forState:UIControlStateNormal];
    self.pickerReference.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
}
도움이 되었습니까?

해결책

I ran into that bug before

The problem is that no matter what the real flash state is in ios 7.1, it always returns UIImagePickerControllerCameraFlashModeAuto. Funny thing is, if you set the flash mode to UIImagePickerControllerCameraFlashModeOff, the flash will really be off, but if you ask the state, it will still be UIImagePickerControllerCameraFlashModeAuto.

So I solved my problem by keeping my own "flashState". When, clicked, I manually change my own state and never trust the one sent back but the UIImagePickerController.

@property (nonatomic) UIImagePickerControllerCameraFlashMode flashMode;

when the button is clicked :

       if (self.flashMode == UIImagePickerControllerCameraFlashModeAuto) {  
            //toggle your button to "on"
            self.flashMode = UIImagePickerControllerCameraFlashModeOn;
        }else if (self.flashMode == UIImagePickerControllerCameraFlashModeOn){  
            //toggle your button to "Off"
            self.flashMode = UIImagePickerControllerCameraFlashModeOff;
        }else if (self.flashMode == UIImagePickerControllerCameraFlashModeOff){ 
            //toggle your button to "Auto"
            self.flashMode = UIImagePickerControllerCameraFlashModeAuto;
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top