所以我使用的是包含标签,活动指示器和uiimageview的子视图。我在子视图中有它,默认情况下我在加载时隐藏它弹出子视图。但是,子视图不会取消隐藏,直到我完成我需要完成的操作意味着它显示大约.01秒而不是我想要的时间
我试过这样做。
do{
loadingSubview.hidden=false;
}while(loadingSubview.hidden);
要确保属性在继续之前设置,但它会产生相同的结果是否我做错了?
答案 0 :(得分:2)
“问题”的根本原因是您阻止事件循环处理其事件。绘图就是其中之一。另一个是用户交互事件等。如果你真的想立即取消隐藏按钮,你可以这样做:
loadingSubview.hidden = NO; // why "false"??? :)
[self performSelector:@selector(timeConsumingStuff)
withObject:nil
afterDelay:0]; // 0 is good here == "when idle"
您可以确定您的按钮,但在完成耗时的工作之前它不会响应(以及其他人)。
另一种解决方案是显式处理运行循环事件。 (看看[NSRunLoop runMode:beforeDate:]
。但是......除非你将耗费时间的东西转移到另一个线程,否则无论如何都会受到惩罚。
答案 1 :(得分:1)
请注意,对于大多数绘图效果,绘图不会实时发生。大多数情况下,你告诉iOS要绘制什么,并且在你退出方法之后它会在主事件循环中绘制它。因此,您无法单步调试调试器,将其隐藏在视图中。
如果您想对某事做出延迟反应,请使用以下方法之一:
[self performSelector:@selector(mydelayedtask) withObject:nil afterDelay:1.0f];
会给你1秒的延迟。
答案 2 :(得分:1)
您需要将当前方法退回运行循环才能进行任何UI更新。
在此UI更新之后继续执行其他操作,稍后在另一个NSTimer任务或其他延迟操作中执行其他操作(仅需几十毫秒)。不要在方法内等待。
答案 3 :(得分:0)
请致电:
[loadingSubview setNeedsDisplay];
您应阅读此处所述的“查看绘图周期”:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html