1

使用 XCode 4.4 和 Mountain Lion,

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

[self.view bringSubviewToFront:saveToCameraRoll];

尝试将它们放在 UIView 的前面。

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

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

而这无济于事。

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

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

如何强制元素注意隐藏?

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

4

2 回答 2

3

正如您所说,您将 ivars 与您的 XIB 文件连接起来,您的问题似乎是您正在主线程上做一些事情,这反过来会阻止运行循环,并且您的 UI 不再被重绘。当您通过更改其属性来更新 UI 元素时,这些更改不会立即应用,而是在下一次重新绘制 UI 时发生,这仅在您给主线程 runloop 一个运行机会时才会发生。但是,如果您执行类似以下代码的操作,则更改将永远不会出现:

[button setHidden:YES];

[self doSomethingReallyExpensiveAndTimeConsuming];

[button setHidden:NO]; 

The result of this code is that the button is set to be hidden, but doesn't get redrawn because the system has no chance to do it and when the system actually has a chance to redraw the UI, the button is already set to be invisible. A fix for this is to either split the work up and schedule it via timers on the main thread, or to use something like GCD to offload the work on a secondary thread (but then you need to make sure that your code is threadsafe!)

于 2012-07-28T00:04:58.553 回答
2

网点是否有可能是零,因为它们没有与 IB 挂钩?如果是这样,任何操纵都不会产生影响。

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

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

于 2012-07-28T00:03:55.277 回答