web-dev-qa-db-ja.com

iPhoneで進行状況インジケーターオーバーレイ/ HUDを表示するにはどうすればよいですか?

テーブルビューの上に浮かぶ半透明のボックスに進行状況インジケーターを表示したいと思います。つまり、テーブルの内容をダウンロードするときに、その上に「更新中」のラベルを表示したいと思います。

私はこれをストア内のいくつかのアプリ、特にFacebook(シェイクしてリロードするとき)とDarkslideで見ました。

私の最初の衝動は、半透明のUIViewを作成し、その中にUILabelとUIProgressIndicatorViewを配置し、それをビュー階層に追加することです...しかし、どこで? UIViewはその兄弟とオーバーラップしない可能性があるため、ウィンドウのサブビューにすることはできません。 また、テーブルのサブビューにすることもできません。テーブルの内容に合わせて上下にスクロールするためです。

新しいUIWindowを作成することを考えましたが、ドキュメントには基本的にしないと書かれています。

CALayerが互いにオーバーラップする可能性があることは知っているので、それはオプションですが、進行状況インジケーターをCALayer内に配置することはできません。 UIViewの代わりにCALayerをアニメーション化する独自の進行状況インジケーターをロールする必要がありますか?

プライベートAPI について聞くことに興味はありません。

編集:質問は誤った仮定に基づいていました。 NSViews(Mac OS X上)は重複しない場合がありますが、iPhone上のUIViewsは重複する場合があります。

23
benzado

あなたは間違いなくビューを重ねることができます。 tableViewのサブビューとして透明オーバーレイを追加するだけです。

UIViewのドキュメントから:

UIViewオブジェクトは、サブビューのネストされた階層内のUIWindowオブジェクト内に配置されます。ビュー階層内の親オブジェクトはスーパービューと呼ばれ、子はサブビューと呼ばれます。ビューオブジェクトは、それを囲むスーパービューの長方形の領域を要求し、その領域内のすべての描画を担当し、そこで発生するイベントを受け取る資格があります。兄弟ビューは問題なくオーバーラップできるため、複雑なビューの配置が可能です。

14
nduplessis

私のHUDバージョンを投稿しました: https://github.com/y0n3l/LGViewHUD

この結果は非常に簡単に得られます:

#import "LGViewHUD.h"
.... 
LGViewHUD* hud = [LGViewHUD defaultHUD];
hud.activityIndicatorOn=YES;
hud.topText=@"The longer....";
hud.bottomText=@"The better !";
[hud showInView:self.view];

enter image description here

タスクが終了したら、呼び出すだけです

[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];

以上です !

15
yonel

また、非常に有名な MBProgressHUDSVProgressHUD もあります
@ yonelのHUDと同じ種類です

[SVProgressHUD show];
[SVProgressHUD dismiss];

SVProgressHUD ExamplesMBProgressHUD 今ではもっと人気があるようです(githubスターに基づいている場合)

9

MainWindow.xibにあるすべてのオブジェクトは、アウトレットを介してアプリケーションウィンドウにアクセスできます。標準プロジェクトのアプリケーションデリゲートにはすでにそれがありますが、進行状況のオーバーレイを表示する必要があるアウトレットをViewControllerに追加することをお勧めします。

UIKitではUIWindowはUIViewであるため(CocoaのNSWindowとNSViewとは異なり)、進行状況ビューをウィンドウのサブビューとして追加するだけです。

[window addSubview:progressView];

progressViewは、アプリケーションUI全体をカバーします。

この例では、この手法を使用してDefault.pngスプラッシュ画像をフェードアウトします。

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html


最近の編集に関連して、MacOS X 10.5 Leopard NSViewのオーバーラップは決定論的です(常にオーバーラップする可能性があり、結果は未定です)が、含まれているビューがレイヤーバックであるかどうかによって前後の順序が異なりますか否か。これは、CALayersをOSXビューシステムに統合した場合の副作用である可能性があります。

1
duncanwilcox