私のアプリでは、オブジェクトがまだ初期化されていたり、画面に描画されたりしているため、実行の最初の数秒間はゆっくりと実行されることに気付きました。これらのオブジェクトをロードし、ロードの進行状況を示すバーを作成するにはどうすればよいですか? ?
2 に答える
「これらのオブジェクトをロードするにはどうすればよいですか」-必要に応じて複数の方法があります-
並行スレッドを使用して物をロードできます。
遅延読み込みを行うことができます-最初の画面に表示する必要があるものを最初に読み込みます(最初の画面で必要のないデータをいくつか読み込んでいることを考慮してください)。
読み込み画面を表示して、読み込みが進行中であることをユーザーに知らせることができます。
UIActivityIndicator
またはを使用してUIProgressBar
、現在読み込み中であることを示すことができます。
ロード画面を表示できます。異なるスレッドを使用したり、スレッドを切り離したりできます。UIActivityIndicatorView
あるいは、またはを使用してUIProgressBar
、現在読み込み中であることを示すこともできます。
UIActivityIndicatorView
基本的には、Mac を起動するときと同じです。回転する円。
UIProgressBar
ローディングが増加するにつれて青でいっぱいになる空のバーです。
Aには、メッセージを送信するときにUIProgressBar
呼び出される変数があります。progress
startAnimating
stopAnimating
UIActivityIndicator
これら 2 つの詳細については、以下のリンクを参照してください。
他の回答に関する質問への更新:
何のためにロードしていますか?ロードしているクラス/オブジェクトにはデリゲート メソッドがありますか? あなたが言っている場合
まだ初期化され、画面に描画されています
object
以下があなたのオブジェクトの1つであると考えると、あなたは言うことができます
if (object) {
// saying just 'object' asks if it is non-zero/valid
}
また、画面に描画されているかどうかを確認するには、次を試してください。
if([self.view.subviews containsObject:object])
また
if([object superview] == self.view)
または方法
-(BOOL)isDescendantOfView:(UIView *)view;
YES
レシーバーがビューの直接または遠いサブビューである場合、またはビューがレシーバー自体である場合の戻り値。そうでなければNO
。
また、ビューの読み込みは別のビューである可能性があるため、そうであるself.view
必要はありません。self
その他のクラスにオブジェクトを作成し、代わりにそのクラスを呼び出すことができますself
。同様に、他のクラスでメソッドをif([otherClass.object superview] == otherClass.view)
作成update
して、次のように言うこともできます。
if([otherClass finishedLoading])
そして、これをupdate
メソッドとして持っています:
- (BOOL)finishedLoading {
return ([object superview] == self.view)
}
これはたくさんのことを取り入れています!他に何かご質問は?