viewDidAppear,而且当 app returns 来自后台时

viewDidAppear, but also when app returns from background

我有一个 UIView ("content"),它是一个带有大红点的白色视图。

应用首次启动时,我希望圆点淡入(仅半秒)。

每当该视图再次出现时(因此,用户已经在其他屏幕上并返回到该屏幕),我希望该点淡入。

目前没问题

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 到 register/unregister。我错了吗?我应该使用另一个 —— 也许 viewDidAppear/somethingElse?或者?

第二个问题:我担心 viewDidAppear 和 'weAreActive` 同时触发(例如,当应用首次启动时)

好像不雅观。有没有更好的方法来查找 "this view genuinely appears" 原因,包括所有启动、唤醒和常规 viewDidAppear?

第一期: viewDidAppear 和 viewDidDisappear 将是 register/unregister 通知的最佳位置,因为您在第二期中概述的原因(首次启动时,注册viewWillAppear 中的 UIApplicationDidBecomeActiveNotification 会导致重复动画。

编辑: 如果您只是检查应用程序何时从后台运行 return,那么您应该使用 UIApplicationWillEnterForegroundNotification 然后你可以使用 viewDidAppear 或 viewWillAppear 而不必担心重复调用。

viewDidAppear 和 viewWillDisappear 将是 运行 动画的最佳位置,这样用户才能真正看到它们。

第二期: viewDidAppear/viewWillAppear 当应用 return 从后台运行时不会被调用,因此您不必担心这两个问题同时被调用。

在某些情况下,整体 'viewHasDefinitelyAppeared' 会很好,但在很多情况下您希望它们分开,并非所有应用程序都希望用户在 return 时看到动画如果所有方法都结合在一起,那么背景是不可能的。