0

내 앱의 카메라 탭에서 사용자가 사진을 찍을 때 (예 : Instagram 등과 같은 많은 사진을 찍는 것과 비슷합니다) 즉시 사용자가 UIImagePickerController을 표시하고 싶습니다. 현재이라는 VC가 있으며 UIImagePickerController에서 가져온 사진을 표시하고 의 기능은 입니다. 사진이 찍히지 않았 음을 감지하면 ImagePickerController모달로이 표시됩니다. 응용 프로그램 모달 활성 컨트롤러를 제시하려고 'View Controller 수명주기에서 UIImagePickerController를 표시 할 때?

"때문에 캐치되지 않는 예외'NSInvalidArgumentException '응용 프로그램 종료, 이유는 :이 대부분의 시간을 근무하는 동안

, 나는 항상 내 말은 예외를 얻을 것입니다 것으로 나타났습니다 . "

여기에 몇 가지 질문에 대한 제안에 따라 컨트롤러를 viewDidAppear에 표시하려고 시도했습니다. 그러나 viewDidAppear을 사용하면 모달 ImagePicker가 해제되지 않고 계속 "모양이 전환되기 시작/끝내기 불균형 호출"오류가 계속 발생합니다.

내 질문은 :

  1. 나는 현재 사진을 촬영하기 위해 사용자에 대한 모달 ImagePickerController을 제시하고 사진을 촬영하면이를 기각하고 있습니다. 이것은 일반적으로 ImagePickerControllers에서 가장 안정적/문제없이 수행되는 방식입니다.
  2. ImagePickerController를 뷰 수명주기에 두어이 원하는 효과를 얻으려는 다른 방법은 무엇입니까? 여기

내 코드입니다 :

viewWillAppear

BOOL modalPresent = (BOOL)(self.presentedViewController); 
if (!appDelegate.imageStorageDictionary[@"picture1"]){ 
    if (modalPresent == NO){ 
     [self presentViewController:self.imagePickerController animated:NO completion:nil]; 
    } 
} 

에서 imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

//Other lines omitted 
if (![[self imagePickerController] isBeingDismissed]) 
    [self dismissViewControllerAnimated:NO completion:nil]; 

답변

1

에서 내가 -viewWillAppear에 관한 질문에 대해 많이 받고 있지 않다,하지만 한 가지 당신은 알고 있어야합니다 그 -viewWillAppear은 두 번 이상 호출됩니다. 이유는 첫 번째 호출은 viewController이로드되고 viewDidLoad이 나타나고 평소와 같이 호출되고 두 번째로 modalViewController (imagePickerController)을 표시하고 다시 닫을 때입니다. viewWillAppear이 호출됩니다. 왜냐하면 viewController의 뷰가 표시되기 때문입니다. 둘째, 사용자가 카메라 버튼을 탭 할 때 현재 카메라의 기능을 원하는에 대한

다음을 수행하십시오

이미 캡처 한 이미지를 따기위한
if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
{ 
    if(myPicker) 
    { 
     [myPicker release]; 
     myPicker = nil; 
     } 
myPicker = [[UIImagePickerController alloc] init]; 

    [self presentViewController:myPicker animated:YES completion:NULL]; 
} 
else 
{ 
    UIAlertView *altnot=[[UIAlertView alloc]initWithTitle:@"Camera Not Available" message:@"Camera Not Available" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    altnot.tag=103; 
    [altnot show]; 
    [altnot release]; 
} 

..

- (무효) ChooseAlreadyCapturedPhoto {

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
{ 
    if(myPicker) 
    { 
     [myPicker release]; 
     myPicker = nil; 
    } 
    myPicker   = [[UIImagePickerController alloc] init]; 
    myPicker.delegate = self; 
    myPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 

    myPicker.allowsEditing = NO; 

} 
[self presentViewController:myPicker animated:YES completion:NULL]; 

}

참고 : 나는 그것을 사용하고 때 나는 피커 이전에 할당 된 개체마다 발표했지만이 필요하지 않습니다. 내 선택기의 유일한 인스턴스를 사용할 수 있습니다. 잘못 표시하지 마십시오.그리고 viewController 내부에 imagePicker-controller을 사용하면 아무런 해가되지 않을 것입니다. modalViewController를 표시하고 없애려면 no를 지정하십시오. 당신이 그것을 닫을 때마다 viewWill이 호출 될 것입니다.