2012-01-22 2 views
0

MFMailComposeViewController를 구현했으며 문제가 발생했습니다.dismissModalViewControllerAnimated가 superview에서 제거하기 전에 먼저 애니메이션을 적용해야합니까?

내 슈퍼 뷰에서는 버튼을 눌렀을 때 인앱 이메일을 가져 왔습니다. 사용자가 메일 양식을 보내거나 닫을 때까지 모든 것이 잘 작동합니다.

[self.view removeFromSuperview];을 실행하기 전에 먼저 애니메이션이 끝날 때까지 기다릴 필요가있는 것처럼 보입니다. 애니메이션이 끝나기 전에이 줄이 실행되고 뷰가 제거되지 않으면 현재 UIView가 제거되지 않으므로 화면의 아무 것도 탭 할 수 없습니다. 클래스를 호출

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 

    [self dismissModalViewControllerAnimated:YES]; 

    // Removes the view so that delegate is passed back to the superview 
    [self.view removeFromSuperview]; 

} 

내 수퍼 액션 :

- (IBAction)buttonPressedSendMail { 
    MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init]; 
    [self addSubview:mailComposer.view]; 
    [mailComposer sendMail:nil]; 
} 

[[self view] setHidden:YES];가있는 UIView를 숨길 작동하지만, 나는이 그 일을의 올바른 방법이라고 생각하지 않습니다.

답변

1

dispatch_after 블록을 사용할 수 있습니다. 메일 작성자가 삭제 된 후에 delayInSeconds를 조정할 수 있습니다.

double delayInSeconds = 1.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self.view removeFromSuperview]; 
    }); 

또는 당신이 시도 할 수 있습니다 :

[자기 dismissViewControllerAnimated : YES 완료 :^{ [self.view removeFromSuperview]; }]]; presentModalViewController와

+0

감사합니다. 그것이 내가 오류를 발견하기 위해 한 일입니다. 그러나 이것이 최선의 방법인지 확실하지 않습니다. – AReality

+0

다른 방법으로 코드를 업데이트하여보기 컨트롤러를 닫습니다. –

+0

모달보기 컨트롤러가 올바르게 표시되지 않습니다. 매우 구체적인 필요가 없다면 Xavi의 대답에있는 코드를 따라갈 것입니다. –

2

현재 뷰 컨트롤러 : 애니메이션 : 추가하거나 뷰 컨트롤러의 뷰를 제거 할 필요를

[self dismissModalViewControllerAnimated:YES]; 

을 할 수없는 것처럼

MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init]; 
[self presentModalViewController:mailComposer animated:YES]; 

그런 다음 모달 뷰를 닫습니다.

관련 문제