1

XCode 4.4 と Mountain Lion を使用して、

UIImageView があり、そのビューには UIProgressView と UIButton があります。アプリが起動すると、ストーリーボードで設定されているように、進行状況ビューとボタンの両方が非表示になります。次に、最初に何かをしているときに進行状況バーを表示し、次に完了したらボタンを再表示しようとします。両方のアイテムについて電話しましたが、

[self.view bringSubviewToFront:saveToCameraRoll];

それらをUIViewの前に配置しようとします。

問題は、プログラムでそれらを再表示しようとすると、機能しないことです。私は呼び出すことができます:

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

そして、それは何もしません。

そのため、ストーリーボードですべてを可視に設定し、コントローラーが読み込まれるとプログラムですべてを非表示に設定しようとしました。全く取引しません; hidden = YES への私の呼び出しは無視されているようです。

次に、実際のプログラミングをすべて削除して、ボタンを押すだけでボタンと進行状況バーが表示されるようにしました。

要素が隠されていることに注意を向けさせるにはどうすればよいですか?

編集:私はまた、アルファを1から0にプログラムで変更しようとしました。変更はありません。私がしていることはすべて無視されているようです。これらの項目は、Ctrl キーを押しながらドラッグする方法で .m ファイルの @interface セクションに作成しました。たぶん、デリゲートやインターフェイスなど、接続されているものは他にありませんか?

4

2 に答える 2

3

ivar を XIB ファイルに接続したとおっしゃったように、メイン スレッドで実行ループをブロックし、UI が再描画されなくなったことに問題があるようです。プロパティを変更して UI 要素を更新すると、それらの変更はすぐには適用されませんが、次に UI が再描画されるときは、メイン スレッドの runloop を実行する機会を与えたときにのみ発生します。ただし、次のコードのようなことを行うと、変更は表示されません。

[button setHidden:YES];

[self doSomethingReallyExpensiveAndTimeConsuming];

[button setHidden:NO]; 

このコードの結果、ボタンは非表示に設定されますが、システムには再描画する機会がなく、システムが実際に UI を再描画する機会がある場合、ボタンは既に非表示に設定されているため、再描画されません。見えない。これを修正するには、作業を分割してメイン スレッドのタイマーを介してスケジュールするか、GCD などを使用してセカンダリ スレッドで作業をオフロードします (ただし、コードがスレッドセーフであることを確認する必要があります)。

于 2012-07-28T00:04:58.553 に答える
2

IBに接続されていないため、アウトレットがゼロである可能性はありますか? もしそうなら、いくら操作しても効果はありません。

試すNSLog(@"%@", saveToCameraRoll);

ヌルですか?IB のコンセントを再接続して修正します。それが機能する場合、 .hidden = NO が機能し、ビュー階層を操作するために追加したコードを取り除くことができます。

于 2012-07-28T00:03:55.277 に答える