我有一个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'(可能是应用程序首次启动时)
看起来不够优雅。是否有更好的方法来寻找“这种观点真正出现”的原因,其中包括所有的发射,清醒和传统的观看日期?是什么?
答案 0 :(得分:1)
第一期: viewDidAppear和viewDidDisappear是注册/取消注册通知的最佳位置,原因是您在第二期中所述(首次启动时注册 UIApplicationDidBecomeActiveNotification 在viewWillAppear中会导致重复的动画。
编辑: 如果您只是检查应用何时从后台返回,那么您应该使用 UIApplicationWillEnterForegroundNotification 然后您可以使用viewDidAppear或viewWillAppear而不必担心重复的电话。
viewDidAppear和viewWillDisappear将是运行动画的最佳位置,因此用户实际上可以看到它们。
第二期:当应用从后台返回时,不会调用viewDidAppear / viewWillAppear,因此您不必担心这两者同时被调用。
在某些情况下,有一个整体'viewHasDefinitelyAppeared'会很好,但是有很多实例你希望它们分开,并非所有应用都希望用户在从背景返回时看到动画,这是不可能的如果所有方法合二为一。