设置隐藏属性不会立即生效

时间:2011-11-08 15:11:12

标签: iphone uiview subview

所以我使用的是包含标签,活动指示器和uiimageview的子视图。我在子视图中有它,默认情况下我在加载时隐藏它弹出子视图。但是,子视图不会取消隐藏,直到我完成我需要完成的操作意味着它显示大约.01秒而不是我想要的时间

我试过这样做。

  do{
     loadingSubview.hidden=false; 
  }while(loadingSubview.hidden);   

要确保属性在继续之前设置,但它会产生相同的结果是否我做错了?

4 个答案:

答案 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