1

簡単に言うと、次のように iOS アプリのrootViewControlleronを変更しようとしています。applicationWillEnterForeground:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    MyViewController *controller = [[MyViewController alloc] init];
    self.window.rootViewController = controller;
}

ただし、アプリがバックグラウンドからフォアグラウンドに移動するときに実行される「ズームイン」アニメーションを iOS が実行すると、以前rootViewControllerの のビューが引き続き表示されます。次に、アニメーションが完了するとすぐに、アプリは newrootViewControllerのビューを画面に表示します。

これを解決する 1 つの方法は、単にそのコードを に移動することですが- (void)applicationDidEnterBackground:、このソリューションの問題は、私のアプリでは、新しいrootViewControllerが割り当てられるかどうかを知る方法がない- (void)applicationWillEnterForeground:(UIApplication *)applicationことです (アプリを離れてからの経過時間に基づいています)。 )。

iOS がアプリをバックグラウンドからフォアグラウンドに移動するアニメーションを実行する前に、アプリを強制的に再描画するにはどうすればよいですか?

4

1 に答える 1

1

これは不可能だと思います。アプリがフォアグラウンドになったときに iOS が表示するアプリの画面は、実際には、アプリがバックグラウンドになったときにシステムが取得したスクリーンショットです。アプリがフォアグラウンドに戻ったときに、その画像を操作または置換する方法はありません。

この動作は、iOS アプリケーション プログラミング ガイドの「バックグラウンドへの移行」セクションに部分的に記載されています。

アプリはそのapplicationDidEnterBackground:メソッドを使用して、バックグラウンド状態への移行を準備できます。バックグラウンドに移行するとき、すべてのアプリは次のことを行う必要があります。

  • 彼らの写真を撮る準備をしてください。メソッドがapplicationDidEnterBackground:戻ると、システムはアプリのユーザー インターフェースの写真を撮り、その結果の画像を遷移アニメーションに使用します。applicationDidEnterBackground:インターフェイスのビューに機密情報が含まれている場合は、メソッドが戻る前に、それらのビューを非表示にするか変更する必要があります。

Apple は、後でこのスクリーンショットを変更または置換できないことを明示的に文書化していませんが、私が知っているどこでも反対のことを言っていません。

于 2013-04-15T17:11:41.187 に答える