2

私はUIView(コンテンツ)を持っています。これは、大きな赤い点を持つ白いビューです。viewDidAppear、また、アプリがバックグラウンドから復帰したとき

アプリが最初に起動するときに、ドットをフェードイン(わずか0.5秒)します。

そのビューが再度表示されるたび

は(そう、ユーザーは他のいくつかの画面になっていて、その画面に戻ってきた)、私はドットがフェードインします。

問題ありません今のところ

override func viewDidAppear(animated: Bool) 
    { 
    content.fadeIn() 
    } 

アプリは(そのビューが表示されていると仮定して)ユーザーがフォアグラウンドにそれをもたらしたときに、バックグラウンドに行くたびしかし、私は、私はこの

func weAreActive(notification: NSNotification) {content.fadeIn()} 
func weAreNotActive(notification: NSNotification) {content.alpha = 0;} 

override func viewWillAppear(animated: Bool) 
    { 
    super.viewWillAppear(animated) 
    NSNotificationCenter.defaultCenter().addObserver(
     self, selector: #selector(weAreActive(_:)), 
     name: UIApplicationDidBecomeActiveNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(
     self, selector: #selector(weAreNotActive(_:)), 
     name: UIApplicationDidEnterBackgroundNotification, object: nil) 
    } 

override func viewDidDisappear(animated: Bool) 
    { 
    super.viewDidDisappear(animated) 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 

を行う。それがフェードインしたいです最初の号:私はviewWillAppear/viewDidDisAppear のペアを使用して登録/登録解除することに懸念しています。私が間違っている? のペア(おそらくviewDidAppear/somethingElse)を使用する必要がありますか?または?

第二の問題:私は両方viewDidAppearと「weAreActive`が同時にトリガー

それは洗練ようです(おそらく、アプリは最初のインスタンス起動)を有する心配です。立ち上がり、目を覚まし、従来のviewDidAppearのすべてを含む原因で「このビューが本当に現れる」を探すより良い方法はありますか?

+1

おそらく 'viewDidAppear'と' viewWillDisappear'を好むでしょう。本当に良い出来事はありません。ほとんどの場合、バックグラウンドから戻るときにUIを変更する必要はありません。ユーザーは通常、できるだけ早く作業したいと思っています。また、システムによって撮影された以前のUIのスクリーンショットを見ることができるため、アニメーションは良い解決策ではありません。 – Sulthan

+0

こんにちは@Sulthan、ありがとう、なぜあなたは 'viewDidAppear'と' viewWillDisappear'を登録/登録解除したいのですか? – Fattie

+0

この通知では問題はありませんが、通常、ビューが表示されているか消えているときに通知を受け取ることは望ましくありません。そのため、私は 'viewDidAppear'を好む理由です。 – Sulthan

答えて

1

まず問題: viewDidAppearとviewDidDisappearは、(最初​​の起動時に、viewWillAppearでUIApplicationDidBecomeActiveNotificationを登録すると、重複したアニメーションを引き起こす、あなたの第二の問題で概説した理由で、通知の登録を解除/登録するには最高の場所でしょう。

編集:あなただけの背景からアプリ戻り、その後、あなたは、あなたがviewDidAppearやviewWillを使用することができますUIApplicationWillEnterForegroundNotificationを使用する必要があるときのためにチェックされている場合重複した通話を心配することなく表示されます。

viewDidAppearとviewWillDisappearはアニメーションを実行するのに最適な場所になりますので、ユーザーは実際にそれらを見ることができます。

第2版: viewDidAppear/viewWillAppearアプリがバックグラウンドから復帰したときに呼び出されないため、これらの両方が同時に呼び出される心配はありません。いくつかのシナリオで

全体的なを持っていいだろう「viewHasDefinitelyAppeared」はあなたがそれらを別々にしたいと思うかなりの数のインスタンスを、すべてのアプリケーションは、彼らがないだろうな背景から戻ったときに、ユーザーがアニメーションを見たいと思っていないがありますすべてのメソッドが1つにまとめられている場合は可能です。

+0

問題ありません。Joe、(1)あなたのコード例では、あなたが最も合理的な方法を持っていると言います。ユーザーがビューを離れるたびにアニメーションを表示するつもりなら、** Will **の表示が消えることをお勧めします。通知の登録を解除すると、最終的なことが起こります。 (2)私はあなたが誰も呼ばれていないことを心配する必要はないと信じています。彼らが呼び出されていない場合、それはアップルの問題です。画面が表示されているかどうかにかかわらず、すべて4が呼び出されます。私は最高のペアについてあなたが言っていることを聞いていますが、実際にあなたがする必要があるものに依存しています。 – darrenallen7

+0

(i)申し訳ありませんが、私はAppleDocumentを持っていません。なぜなら、私のアプリケーションに戻ったときに私のviewDidAppearが動作しない理由を疑問に思っていることです。 (ii)viewWillAppearが最初の起動時に通知を登録するのに早く呼び出されないため、ここでも安全です。私はそれを確認するためのテストを設定していますが、ダブルコールについて心配する必要はないと思います。 – darrenallen7

+0

私はviewWillAppearが十分に早く呼び出され、通知が最初に呼び出されるように修正しました。私はそれに応じて私の答えを編集するつもりです。 – darrenallen7

関連する問題