5

バックグラウンドで一定期間使用した後、ユーザーをアプリからロックアウトしたいと考えています。私は AppDelegate でこれをキャッチしていますapplicationWillEnterForeground(そして に保存されている時間と比較していapplicationWillResignActiveます)。タイムアウト期間よりも短い場合、アクションは実行されません。私が呼び出すタイムアウト期間を超えた場合:

[_navigationController popToRootViewControllerAnimated:NO];

これにより、ユーザーはルート ビューに戻ります。

1回の視覚的な中断で完全に正常に機能します. 以前のビュー (アプリケーションが非アクティブになったときにユーザーが表示していたビュー) は、ルートにポップする前に非常に短時間表示されます。テストでは、applicationWillEnterForeground呼び出される前にビューが再表示されるようです。

私が持っていた唯一の考えは、塗りつぶされた長方形でビューを隠すなど、非アクティブになる前にすべてを非表示にすることです。これは汚いハックのようなにおいがするので、もっと良い方法があると思います。

また、同じ最終結果に到達するためのさまざまな方法にもオープンです。ありがとうございました!

4

2 に答える 2

0

ビューを非表示にすることでこれを解決しました。applicationWillResignActive には _navigationController.view.alpha=0; があり、_navigationController.view.alpha=100; を配置しました。(必要に応じて) ログイン ビューにポップした後、applicationWillEnterForeground で。ビューをポップして復元するよりも簡単です (この場合はかなり重い)。

@TheBlack は隠しプロパティを指摘していますが、これはおそらくデバイス上でわずかに簡単です。A) 50% のアルファ ビューでデバッグするのは楽しいし、B) アルファが好きだからです。しかし、あなたが私のようなアルファ ファンでない限り、非表示の方が少し良いかもしれません。

于 2011-06-06T14:55:47.030 に答える
0

ドキュメントから:アプリの状態遷移を処理するための戦略

アプリのスナップショットの準備

アプリ デリゲートの applicationDidEnterBackground: メソッドが戻った直後に、システムはアプリのウィンドウのスナップショットを取得します。同様に、バックグラウンド タスクを実行するためにアプリが起動されると、システムは関連する変更を反映するために新しいスナップショットを作成する場合があります。たとえば、ダウンロードされたアイテムを処理するためにアプリが起動されると、システムは新しいスナップショットを取得して、アイテムの組み込みによって引き起こされた変更を反映できるようにします。システムは、マルチタスク UI でこれらのスナップショット イメージを使用して、アプリの状態を表示します。

バックグラウンドに入ったときにビューに変更を加える場合は、メイン ビューの snapshotViewAfterScreenUpdates: メソッドを呼び出して、それらの変更を強制的にレンダリングすることができます。ビューで setNeedsDisplay メソッドを呼び出しても、スナップショットには効果がありません。これは、スナップショットが次の描画サイクルの前に取得され、変更がレンダリングされないためです。YES の値を指定して snapshotViewAfterScreenUpdates: メソッドを呼び出すと、スナップショット機構が使用する基礎となるバッファーが即座に更新されます。

于 2014-06-28T12:46:36.483 に答える