viewDidAppear,当app从后台返回时

时间:2016-05-13 20:49:05

标签: ios swift uiview nsnotificationcenter uiapplicationdelegate

我有一个UIView(“内容”)是一个带有大红点的白色视图。

当应用程序首次启动时,我希望点亮(仅半秒)。

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

到目前为止没问题

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'(可能是应用程序首次启动时)

看起来不够优雅。是否有更好的方法来寻找“这种观点真正出现”的原因,其中包括所有的发射,清醒和传统的观看日期?是什么?

1 个答案:

答案 0 :(得分:1)

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

编辑: 如果您只是检查应用何时从后台返回,那么您应该使用 UIApplicationWillEnterForegroundNotification 然后您可以使用viewDidAppear或viewWillAppear而不必担心重复的电话。

viewDidAppear和viewWillDisappear将是运行动画的最佳位置,因此用户实际上可以看到它们。

第二期:当应用从后台返回时,不会调用viewDidAppear / viewWillAppear,因此您不必担心这两者同时被调用。

在某些情况下,有一个整体'viewHasDefinitelyAppeared'会很好,但是有很多实例你希望它们分开,并非所有应用都希望用户在从背景返回时看到动画,这是不可能的如果所有方法合二为一。