modalviewcontroller动画太快了?

时间:2009-12-10 08:48:00

标签: iphone uiviewcontroller

我正在以正常方式显示模态uiviewcontroller:

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

以后......

[self.navigationController dismissModalViewControllerAnimated:FALSE];

问题是//执行内容太快,并且在演示调用动画完成之前发生了调用调用,其结果是根本不解除视图。如果我将animation参数设置为false,那么每次都可以正常工作,或者//这样做的东西比动画需要更长时间...

该怎么办?睡觉? (ick),以某种方式取消过渡动画?

信息不足?这里还有一些:

关键是,有时工作线程在原始modalviewcontroller 动画完成之前完成,这会在调用dismissmodalviewcontroller时导致问题。总之,如果在当前动画完成之前调用dismiss,则实际上无法将其解除。我正在向苹果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

4 个答案:

答案 0 :(得分:0)

我更喜欢做smth,这可能需要花费很多时间在单独的线程中。然后你可以通知主线程(例如,你可以将调用者设置为代理并在计算后发送消息,或者url请求,或者smth else已经结束)并在那里解雇你的模态视图控制器。如果我不知道计算时间并想要正确显示动画,我会使用performSelector:withObject:afterDelay:方法。

答案 1 :(得分:0)

您是否使用模态对话框显示有关您正在做的事情的信息?即它是否被用作请等待......如果是这样的话,当您可能更好地在当前视图的顶部显示请等待对话框时。

答案 2 :(得分:0)

看起来这是一个错误。用nsthread延迟你的解雇,或者使用其他愚蠢来解决问题。

答案 3 :(得分:0)

我遇到了同样的问题。我找到了一个适合我的妥协方案。基本上我是在没有动画的情况下呈现模态视图但是用动画来解除它。没有动画,没有动画线程正在启​​动,这可能会给你带来麻烦。

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

以后......

[self.navigationController dismissModalViewControllerAnimated:YES];

离完美还很远,但也许有帮助。