2014-01-25 2 views
5

커스텀 카메라 오버레이 뷰와 함께 UIImagePickerController를 사용 중이고 자동, 켜기 및 끄기 사이에서 플래시 모드를 전환하는 사용자 정의 버튼을 추가하고자합니다. 버튼이 호출하는 메소드는 다음과 같습니다.사용자 정의 카메라 오버레이로 플래시 모드 변경하기

- (void)didTapFlash:(id)sender 
{ 
    if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeAuto) 
    { 
     [imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn]; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconOn.png"] forState:UIControlStateNormal]; 
    } 
    else if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeOn) 
    { 
     self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconOff.png"] forState:UIControlStateNormal]; 
    } 
    else if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeOff) 
    { 
     self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconAuto.png"] forState:UIControlStateNormal]; 
    } 
} 

문제는 작동하지 않습니다. 컨트롤러가 표시되면 self.imagePickerController.cameraFlashMode의 값은 변경되지 않습니다. 플래시 값은 표시되기 전에 변경 될 수 있지만 일단 나타나면 항상 0 (자동) 값을 반환합니다.

- (void)didTapFlash:(id)sender 
{ 
    if (flashButton.tag == 0) 
    { 
     [imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn]; 
     self.flashButton.tag = 1; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconOn.png"] forState:UIControlStateNormal]; 
    } 
    else if (flashButton.tag == 1) 
    { 
     self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff; 
     self.flashButton.tag = -1; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconOff.png"] forState:UIControlStateNormal]; 
    } 
    else if (flashButton.tag == -1) 
    { 
     self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; 
     self.flashButton.tag = 0; 
     [self.flashButton setImage:[UIImage imageNamed:@"flashIconAuto.png"] forState:UIControlStateNormal]; 
    } 
} 

모두가 예상 작품과 같이 이상한 부분은 플래시는 I가 위의 코드를 변경하면 그렇게 것처럼 행동, 값이 변경되지 않는 경우에도입니다. (flashButton.tag는 단지 플래시 값을 저장하고 있습니다)

여기에 무슨 일이 일어나는지 아는 사람 있습니까? 왜 플래시가 제대로 설정된 것처럼 동작하더라도 cameraFlashMode의 값은 항상 0 (NSLog 문과 디버거를 통해 직접 선택했을 때) 모두 0입니까?

+0

또한이 문제가 있습니다. 이 문제를 해결 했습니까? – hmlasnk

+0

질문의 두 번째 부분에서 코드를 사용하면 플래시가 예상대로 작동하지만 imagePickerController.cameraFlashMode에서 새 값이 업데이트되지 않으므로 값을 다른 위치에 저장해야합니다 (위 코드에서 저장했습니다. 꼬리표). 나는 아직도 그 이유에 대한 이유를 모른다. CameraFlashMode가 private 값으로 새 값을 전달하고 재설정된다고 가정합니다. –

+1

iOS 7.1에 버그가 있다고 생각합니다. 그것이 바로 그 문제입니다. 이전에 iOS 7.0을 사용하고 있는지 확인하고 완벽하게 작동했습니다. 하지만 iOS 7.1에서는 작동하지 않습니다. – hmlasnk

답변

1
최신 iOS 버전에서 버그가 수 있도록 보인다

,

당신이

self.picker.showsCameraControls = true 

의 깃발을 가능하게 작동합니다 것을 알 수 있습니다하지만 당신 수 있도록 OverlayView에 기본 카메라 제어를 보여줍니다 그래서이 코드로 해킹했습니다.

self.picker.showsCameraControls = true 
self.picker.cameraFlashMode = .On 
self.picker.showsCameraControls = false 

표시 및 숨기기 제어 기능을 사용하는 사용자를 방해하지 않을 정도로 빠릅니다. 그것은 나를 위해 일했고 나는 그것이 당신의 경우에도 효과가있을 것이라고 확신합니다!

관련 문제