iPhone编程 - UIView元素似乎忽略了Hidden = NO调用

时间:2012-07-27 23:39:30

标签: iphone ios uiview

使用XCode 4.4和Mountain Lion,

我有一个UIImageView,在那个视图中,我有一个UIProgressView和一个UIButton。当应用程序启动时,进度视图和按钮都被隐藏,如故事板中所设置的那样。然后我尝试取消隐藏它们,首先是我正在做某事时的进度条,然后是我完成时的按钮。对于这两个项目,我已经致电

[self.view bringSubviewToFront:saveToCameraRoll];

尝试将它们放在UIView前面。

问题是,当我以编程方式尝试取消隐藏它们时,它不起作用。我可以打电话:

progressBar.hidden = NO;
[self.view bringSubviewToFront:progressBar];

这没有任何作用。

然后我尝试在故事板中将所有内容设置为 visibile ,然后在控制器加载后以编程方式将所有内容设置为不可见。没有成交;现在我对hidden = YES的调用似乎被忽略了。

然后我删除了所有实际的编程,因此按下按钮应该只会导致按钮和进度条出现,这可能导致主线程变得饥饿且无法更新。

如何强制元素注意被隐藏?

编辑:我现在也尝试以编程方式将alpha从1修改为0.无变化。这就像我正在做的一切都被忽略了。我通过ctrl-drag方法将这些项目放入.m文件的@interface部分;也许我没有更多的代表或接口或其他任何东西?

2 个答案:

答案 0 :(得分:3)

正如你所说的那样,你将ivars与你的XIB文件连接起来,看起来你的问题是你在主线程上做了什么,反过来阻止了运行循环,你的UI也不再重新绘制了。当您通过更改其属性来更新UI元素时,这些更改不会立即应用,但是下次重新绘制UI时,只有当您为主线程runloop提供运行机会时才会发生这种更改。但是,如果您执行类似以下代码的操作,则更改将永远不会出现:

[button setHidden:YES];

[self doSomethingReallyExpensiveAndTimeConsuming];

[button setHidden:NO]; 

此代码的结果是该按钮被设置为隐藏,但由于系统没有机会进行重绘,并且当系统实际上有机会重绘UI时,该按钮已经是设置为隐形。解决这个问题的方法是拆分工作并通过主线程上的计时器安排工作,或者使用类似GCD的东西卸载辅助线程上的工作(但是你需要确保你的代码是线程安全的!)

答案 1 :(得分:2)

出口是否可能是零,因为它们没有连接到IB?如果是这样,任何操纵都不会产生影响。

尝试NSLog(@"%@", saveToCameraRoll);

是空吗?通过重新连接IB中的插座来修复。如果可行,则.hidden = NO将起作用,您可以删除您为操作视图层次结构而添加的任何代码。