我正在以正常方式显示模态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
答案 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];
离完美还很远,但也许有帮助。