2010-07-02 11 views
0

누군가에게 도움을 줄 수있는 문제가 있습니다. 나는 그것이 매우 간단하다는 것을 확신하지만, 나는 그것을 볼 수 없으며이 버그를 발견하는 데 도움이되는 여분의 눈 모음을 실제로 사용할 수 있습니다.dismissModalViewController가 예상대로 작동하지 않습니다.

내가 사용중인 앱은 UIImagePickerController를 사용하여 스톡 카메라 UI가 숨겨진 카메라 미리보기를 제공합니다. 이 미리보기는 필요한 작업을 수행하는 몇 가지 단추가있는 cameraOverlay보기를 구현하며 그 중 하나는 카메라 미리보기를 닫는 것입니다.

오버레이보기에서 단추로 호출 할 때 어떤 이유로 카메라보기를 닫는 기능이 작동하지 않습니다. NSLog 함수를 실제로 단추에 의해 호출되는 볼 수 있지만 단순히 dismissModalViewController 작동하도록 허용하지 않습니다. 필자는 NSTimer를로드 한 후 몇 초간 호출하여 함수를 테스트했으며 cameraOverlay의 단추에서 호출 할 때 제대로 작동하지 않습니다.

내 viewController (CameraTestViewController.m)는 아래 그림과 같이 버튼을 눌러 UIImagePicker를 호출합니다.

-(IBAction) getPhoto:(id) sender { 


    OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)]; 
    picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    picker.cameraDevice = UIImagePickerControllerCameraDeviceFront; 
    picker.cameraOverlayView = overlay; 
    picker.showsCameraControls = NO; 
    picker.toolbarHidden = YES; 
    [self presentModalViewController:picker animated:NO]; 
    //[self performSelector:@selector(doCancel) withObject:nil afterDelay:10]; 

} 

내가 필요한 버튼을 설정 다른 곳의 ViewController 내 OverlayView.m 클래스의 다음

-(void)doCancel 
{ 
    NSLog (@"doCancel method has been called"); 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

에서이 방법으로 카메라 뷰를 닫고의 뒤 삭제를 호출하는 방법을 제공 모달 뷰 컨트롤러.

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     // Clear the background of the overlay: 
     self.opaque = NO; 
     self.backgroundColor = [UIColor clearColor]; 

        ... 

myButton04 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     myButton04.frame = CGRectMake(10, 447, 44, 13); 
     [myButton04 setTitle:@"" forState:UIControlStateNormal]; 
     [myButton04 addTarget:self action:@selector(scanButton05TouchUpInside) forControlEvents:UIControlEventTouchUpInside]; 
     [myButton04 setImage:[UIImage imageNamed:@"camControlsBack.png"] forState:UIControlStateNormal]; 
     [self addSubview:myButton04]; 

        ... 

    } 

    return self; 

} 


- (void) scanButton05TouchUpInside { 

    NSLog(@"BACK BUTTON HAS BEEN PRESSED"); 
    CameraTestViewController *baseViewController = [[CameraTestViewController alloc] init]; 
    [baseViewController doCancel]; 

} 

가장 도움이 될만한 도움이 될 것입니다. 나는 보라색 이마를 가지고이 벽에 머리를 두들겨 맞기가 아프다. : 시원함 :

고맙습니다.

+0

당신은'전화 - [자기 presentModalViewController를 : 애니메이션 :] ','왜 이렇게 '- [self dismissModalViewControllerAnimated :]'를 호출 할 것이다. 뷰 자체는 그려지지만 뷰 컨트롤러는 스스로를 닫지 않습니다. –

+0

그것은 'doCancel'메서드가 호출되는 코드입니다. 그것은 내가 수많은 앱에서 해낸 것과 같은 방식이지만, 어떤 이유로 여기서는 작동하지 않습니다. CameraTestViewController 클래스에서 doCancel 메서드를 호출하고 뷰를로드 한 후에 프로그래밍 방식으로 NSTimer에 의해 트리거 될 때 작동하지만 버튼을 누르지 않으면 작동합니다. OverlayView 클래스에 메서드를 넣으려고하면 SIGABRT 신호가 발생합니다. – viewPusher

+0

사실, 위의 코드에서 'self'대신 'picker'라고 불렀습니다.하지만 두 가지 방법으로 시도해 보았습니다. – viewPusher

답변

0

내 modalViewController를 취소하는 방법은 부모를 호출하는 것입니다 :

[[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
+0

나는 이것도 시험해 보았다. 그리고 행운이 없다. 문제는 'doCancel'메소드 내부의 dismissModalViewController 태스크가 아닌 것 같습니다. 테스트를 위해 프로그래밍 방식으로 호출 할 때이 코드가 작동하도록 만들 수 있습니다. 카메라 뷰는 해당 조건에서와 같이 해제되지만, 카메라의 OverlayView 내부에 포함 된 버튼과 똑같은 기능을 호출하지는 않습니다. ?!?! – viewPusher

+0

메모리에 무엇인가가 걸려 있고보기가 닫히지 않을 수 있습니까? 분명히 호출되는 함수가 한 조건 집합에서 작동하지만 다른 조건에서는 작동하지 않는 이유를 생각할 수 없습니다. – viewPusher

1

사용이 코드 아래 :

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES]; 
관련 문제