テーブルビューの上に浮かぶ半透明のボックスに進行状況インジケーターを表示したいと思います。つまり、テーブルの内容をダウンロードするときに、その上に「更新中」のラベルを表示したいと思います。
私はこれをストア内のいくつかのアプリ、特にFacebook(シェイクしてリロードするとき)とDarkslideで見ました。
私の最初の衝動は、半透明のUIViewを作成し、その中にUILabelとUIProgressIndicatorViewを配置し、それをビュー階層に追加することです...しかし、どこで? UIViewはその兄弟とオーバーラップしない可能性があるため、ウィンドウのサブビューにすることはできません。 また、テーブルのサブビューにすることもできません。テーブルの内容に合わせて上下にスクロールするためです。
新しいUIWindowを作成することを考えましたが、ドキュメントには基本的にしないと書かれています。
CALayerが互いにオーバーラップする可能性があることは知っているので、それはオプションですが、進行状況インジケーターをCALayer内に配置することはできません。 UIViewの代わりにCALayerをアニメーション化する独自の進行状況インジケーターをロールする必要がありますか?
プライベートAPI について聞くことに興味はありません。
編集:質問は誤った仮定に基づいていました。 NSViews(Mac OS X上)は重複しない場合がありますが、iPhone上のUIViewsは重複する場合があります。
あなたは間違いなくビューを重ねることができます。 tableViewのサブビューとして透明オーバーレイを追加するだけです。
UIViewのドキュメントから:
UIViewオブジェクトは、サブビューのネストされた階層内のUIWindowオブジェクト内に配置されます。ビュー階層内の親オブジェクトはスーパービューと呼ばれ、子はサブビューと呼ばれます。ビューオブジェクトは、それを囲むスーパービューの長方形の領域を要求し、その領域内のすべての描画を担当し、そこで発生するイベントを受け取る資格があります。兄弟ビューは問題なくオーバーラップできるため、複雑なビューの配置が可能です。
私の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];
タスクが終了したら、呼び出すだけです
[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut];
以上です !
また、非常に有名な MBProgressHUD & SVProgressHUD もあります
@ yonelのHUDと同じ種類です
例
[SVProgressHUD show];
[SVProgressHUD dismiss];
MBProgressHUD 今ではもっと人気があるようです(githubスターに基づいている場合)
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ビューシステムに統合した場合の副作用である可能性があります。