0

ViewControllerアプリがフォアグラウンドになるたびにポップアップが表示され、アクセスパスワードが必要な特定のものを実装します。

アプリはすでに成熟しており、少し複雑なので、このパスワード画面を別の VC の上に表示される別の ViewController として処理し、applicationDidBecomeActive などのメソッドによって AppDelegate から呼び出されます。

    if (self.pwdVc==nil)
        self.pwdVc = [mainStoryboard instantiateViewControllerWithIdentifier:@"passwordScreen"];
    [self.window.rootViewController presentViewController:self.pwdVc animated:NO completion:nil];

このアプローチの問題は次のように思われます: アプリがフォアグラウンドになったとき、パスワード ViewController はまだ画面に描画されておらず、短い間、実際のアプリ画面がクリアに表示されます。

でパスワード ViewController の提示applicationDidEnterBackgroundを事前にトリガーしても、アプリがフォアグラウンドに戻ったときに実際の画面の再描画が常に行われるため、アプリの画面が不必要に表示されます。

このパスワード画面で基になるViewControllerを遅滞なく非表示にする最も適切な方法を誰かが提案してもらえますか?

アルファ設定が 0.0 から 1.0 に切り替わるメソッドも、表示に時間がかかるようで、今までは機能しませんでした。

ありがとうございました!

4

3 に答える 3

1

このメソッドを使用して、viewController をすべての上に表示します。

+ (void)presentViewController:(UIViewController *)viewController animated:(BOOL)animated complete:(void (^)(void))callback
{
    UIViewController *activeModalVC = [[[[UIApplication sharedApplication] delegate] window].rootViewController presentedViewController];
    if (activeModalVC) {
        [activeModalVC presentViewController:viewController animated:animated completion:callback];
    } else {
        [[[[UIApplication sharedApplication] delegate] window].rootViewController presentViewController:viewController animated:animated completion:callback];
    }
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Making passwordView to load
    self.pwdVc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]
                  instantiateViewControllerWithIdentifier:@"passwordScreen"];
    [self.pwdVc view];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [AFAppDelegate presentViewController:self.pwdVc animated:NO complete:nil];
}
于 2014-09-23T07:20:27.807 に答える
0

解決策はこのトピックから来ており、不透明な「スクリーンロック」ビューを他のビューの上に置き、hidden適切な方法でそのプロパティによって制御することに基づいていAppDelegateます!

そう:

  1. Interface Builder で他のビューの上にビューを追加し、最初に に設定view.hidden=NOdidFinishLaunchingWithOptionsます。
  2. この呼び出しは、アプリをバックグラウンドに送信するときとマルチタスク画面を呼び出すときの両方で発生するため、必ず に設定view.hidden=NOしてください。applicationWillResignActive
  3. 「画面ロック」ビューにボタンを配置し、view.hidden=YESパスワードが正しい場合に設定するメソッドを呼び出します。

オプションlayer.zPositionで、表示されるビューの順序を調整するために使用します。

ほら!皆さん、ありがとうございました!

于 2014-09-23T18:12:30.280 に答える
0

2013年から、このトピックに関する別のスレッドを見つけました。これapplicationDidEnterBackgroundは、画面のスナップショットが取得される前に、現在のビューから関連データを削除する命令を実行する可能性があることを示しています。

実際には私にとってはうまくいきません.フォアグラウンドに戻るためのスナップショットは、applicationDidEnterBackgroundまたは実行前の画面コンテンツで取得されますapplicationWillResignActive.

于 2014-09-23T16:04:23.090 に答える