2009-12-10 108 views
0

我以正常的方式顯示一個模式的UIViewController:modalviewcontroller動畫太快?

[self.navigationController presentModalViewController:self.lvc animated:YES]; 
//do stuff 

後來就......

[self.navigationController dismissModalViewControllerAnimated:FALSE]; 

的問題是,//做的東西太快,而解僱通話在演示文稿調用動畫完成之前發生,這完全不影響視圖。如果我將動畫參數設置爲false,則每次都有效,或者如果//做的東西需要比動畫更長的時間...

該怎麼辦?睡覺? (ick),以某種方式取消過渡動畫?

沒有足夠的信息?這裏有更多一些:

的一點是,有時工作線程結束之前原modalviewcontroller 動畫完成,這會導致問題的時候dismissmodalviewcontroller被調用。總之,如果您在當前動畫完成之前致電解僱,您實際上不能解僱它。我正在申請一個bug /蘋果atm。

而這裏的證明測試用例:


#import "ModalbugsViewController.h" 

@implementation modalbugsViewController 
@synthesize modal; 
-(void)dismisser { 
    [self dismissModalViewControllerAnimated:TRUE]; 
} 
-(void) sleeper:(NSNumber *) t{ 
    [NSThread sleepForTimeInterval:[t floatValue]]; 
    [self performSelectorOnMainThread:@selector(dismisser) withObject:NULL waitUntilDone:TRUE]; 
} 
-(IBAction) shortClick:(id)sender { 
    [self presentModalViewController:self.modal animated:YES]; 
    [NSThread detachNewThreadSelector:@selector(sleeper:) toTarget:self withObject:[NSNumber numberWithFloat:0.1f]]; 

} 
-(IBAction) longClick:(id)sender { 
    [self presentModalViewController:self.modal animated:YES]; 
    [NSThread detachNewThreadSelector:@selector(sleeper:) toTarget:self withObject:[NSNumber numberWithFloat:5.0f]]; 
} 


- (void)dealloc { 
    [self.modal release]; 
    [super dealloc]; 
} 

@end 
 
+0

您需要提供更多關於您想要實現的信息。模態視圖是否使用了請稍候對話(正如Lyonanderson所建議的)?如果是這樣,如果操作完成時間很短,爲什麼還需要「請稍候」對話? – Jasarien

回答

0

看起來這是一個錯誤。用nsthread延長你的解僱時間,或者讓其他愚蠢的方法解決。

0

我喜歡做的不便,可以採取很多時間在單獨的線程。然後您可以通知主線程(例如,您可以將主叫方設置爲委託並在計算後發送消息,或者URL請求,或者其他方式已經結束),然後解除您的模態視圖控制器。如果我不知道計算時間並想正確顯示動畫,則使用performSelector:withObject:afterDelay:方法。

+0

你是誤解了這個問題。 –

+0

根據更新的信息。爲什麼你不能只是解僱你的模式viewController,例如,1秒的延遲?我認爲它會很長。 – Morion

+0

是的,有很多令人惱火的解決方法。看起來它只是另一個SDK錯誤。 –

0

您是否正在使用模態對話框來顯示您正在做的事情的相關信息?即它是否被用作Please Wait ...如果是這樣,當您可能更好時,只需在當前視圖頂部顯示一個Please wait對話框。

+0

當然,我可能會過得更好,也許會更容易,但那不是我想要做的。 –

0

我有同樣的問題。我找到了一個適合我的折衷辦法。基本上我是在沒有動畫的情況下呈現模態視圖,但用動畫解除它。如果沒有動畫,沒有動畫線程正在啓​​動,這可能會給您帶來麻煩。

[self.navigationController presentModalViewController:self.lvc animated:NO]; 
//do stuff 

後來就......

[self.navigationController dismissModalViewControllerAnimated:YES]; 

還遠不夠完善,但也許它幫助。