所以我使用的子视图包含一个标签,活动指示灯和的UIImageView。我有它在一个子视图,我默认时加载我隐藏它弹出子视图。然而,子视图并没有隐藏自己,直到我完成后我需要完成的意义它显示了约0.01秒,而不是我想要的时间设置隐藏属性不会立即生效
我试过做这样的事情。
do{
loadingSubview.hidden=false;
}while(loadingSubview.hidden);
要确定属性是在继续之前设置,但它会产生相同的结果是否有我做错了什么?
所以我使用的子视图包含一个标签,活动指示灯和的UIImageView。我有它在一个子视图,我默认时加载我隐藏它弹出子视图。然而,子视图并没有隐藏自己,直到我完成后我需要完成的意义它显示了约0.01秒,而不是我想要的时间设置隐藏属性不会立即生效
我试过做这样的事情。
do{
loadingSubview.hidden=false;
}while(loadingSubview.hidden);
要确定属性是在继续之前设置,但它会产生相同的结果是否有我做错了什么?
你需要退出当前的方法(S)回运行循环任何UI更新发生。在
动做其他的东西这个UI更新后,以后在其他的NSTimer任务或其他动作延迟(只是一对夫妇几十毫秒都行)。不要在方法中等待。
只要致电:
[loadingSubview setNeedsDisplay];
你应该阅读“的查看图纸周期”这里描述:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html
贵“的问题”的根本原因是,你阻止事件循环无法处理其事件。绘图就是其中之一。另外一个是用户互动活动等,如果你真的想立即取消隐藏按钮,你可以这样做:
loadingSubview.hidden = NO; // why "false"??? :)
[self performSelector:@selector(timeConsumingStuff)
withObject:nil
afterDelay:0]; // 0 is good here == "when idle"
你可以肯定你的按钮,但它不会响应(以及其他)直到耗时完成。
另一个解决方案是明确的进程中运行循环的事件。 (看看[NSRunLoop runMode:beforeDate:]
。但是......除非你把耗时的东西移到另一个线程上,否则将会有一个惩罚
我试过这个,它没有工作 – endy