0

私のアプリでは、オブジェクトがまだ初期化されていたり、画面に描画されたりしているため、実行の最初の数秒間はゆっくりと実行されることに気付きました。これらのオブジェクトをロードし、ロードの進行状況を示すバーを作成するにはどうすればよいですか? ?

4

2 に答える 2

2

「これらのオブジェクトをロードするにはどうすればよいですか」-必要に応じて複数の方法があります-

  1. 並行スレッドを使用して物をロードできます。

  2. 遅延読み込みを行うことができます-最初の画面に表示する必要があるものを最初に読み込みます(最初の画面で必要のないデータをいくつか読み込んでいることを考慮してください)。

  3. 読み込み画面を表示して、読み込みが進行中であることをユーザーに知らせることができます。

UIActivityIndicatorまたはを使用してUIProgressBar、現在読み込み中であることを示すことができます。

于 2012-05-14T08:49:51.177 に答える
2

ロード画面を表示できます。異なるスレッドを使用したり、スレッドを切り離したりできます。UIActivityIndicatorViewあるいは、またはを使用してUIProgressBar、現在読み込み中であることを示すこともできます。

UIActivityIndicatorView基本的には、Mac を起動するときと同じです。回転する円。 UIProgressBarローディングが増加するにつれて青でいっぱいになる空のバーです。

Aには、メッセージを送信するときにUIProgressBar呼び出される変数があります。progressstartAnimatingstopAnimatingUIActivityIndicator

これら 2 つの詳細については、以下のリンクを参照してください。

プログレスバー Apple ドキュメント

プログレスバーの画像

アクティビティ インジケータ Apple ドキュメント

アクティビティ インジケーターの GIF 画像

他の回答に関する質問への更新:

何のためにロードしていますか?ロードしているクラス/オブジェクトにはデリゲート メソッドがありますか? あなたが言っている場合

まだ初期化され、画面に描画されています

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)
}

これはたくさんのことを取り入れています!他に何かご質問は?

于 2012-05-14T08:56:01.713 に答える