0

私のアプリにはたくさんのターン ベースのゲームがあり、同じアニメーションを使用して開始プレイヤーを宣言しています。

viewDidLoad の最後に、宣言用のコードを配置しました。現在のビューのスクリーンショットを撮り、それを少しぼかすと、開始プレイヤーの名前を示すラベルが表示されます。問題は、前のビューのスクリーンショットを取得し、前のビューのぼやけたスクリーンショットにラベルが表示されることが時々発生することです。

私のviewDidLoadは次のようになります:

-(void) viewDidLoad
{
    [super viewDidLoad];

    [self initializeThings];

    [self layoutUI]; //In some of the games this part requires heavy processing,
                     //ie laying out a 2D array of buttons (20x20=400 of them)

    [self showStartingPlayer];
}

cover verticalすべての VC でデフォルトのトランジション スタイルを使用しています。遅延を伴う performSelector を使用して deferredを呼び出してみ[self showStartingPlayer];ましたが、デバイスごとに異なる遅延値が必要なため、堅牢なソリューションではありません。viewDidLoad またはそのようなことを行う実用的な方法の代わりに、viewcontroller ライフサイクルで使用できる他の方法はありますか?

4

3 に答える 3

1

を使用している場合はpresentViewController: animated: completion:、完了ブロックを利用して、ビュー コントローラーに遷移が完了したことを通知します。

たとえば、-(void)wasJustPresented必要な UI レイアウトを呼び出すビュー コントローラーに呼び出されるパブリック メソッドを追加できます。

次に、完了ブロックでこれを呼び出します。元:

[self presentViewController:newVC
                   animated:YES
                 completion:^(void){
            [newVC wasJustPresented];
            }];

これにより、表示が完了した直後にView Controllerに通知されます。

于 2013-06-09T01:49:29.753 に答える
0

viewDidLoadビューコントローラーのビューがロードされたときに呼び出されますが、実際に画面に表示されているわけではありません。

あなたはそれをするために使うかもしれ- (void) viewDidAppear:ません。

于 2013-06-08T23:50:28.573 に答える
0

viewDidAppearビューの遷移が終了したときに呼び出される内でメソッドを呼び出すようにしてください。

-(void)viewDidAppear:animated
{
    [super viewDidAppear:animated];
    //put your call here
}
于 2013-06-08T23:52:57.743 に答える