【发布时间】:2016-05-13 20:49:04
【问题描述】:
我有一个 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 pair 来注册/取消注册。我错了吗?我应该使用另一个pair——也许是viewDidAppear/somethingElse?还是?
第二个问题:我担心viewDidAppear 和 'weAreActive` 同时触发(例如,在应用首次启动时)
这似乎不优雅。有没有更好的方法来寻找“这个视图真正出现”,原因包括所有启动、唤醒和常规 viewDidAppear?
【问题讨论】:
-
我可能更喜欢
viewDidAppear和viewWillDisappear。真的没有比这更好的事件了。大多数时候,当您从后台返回时,您不需要更改 UI。用户通常希望尽可能快地工作,有时他们可以看到系统截取的先前 UI 的屏幕截图,因此动画不是一个好的解决方案。 -
嗨@Sulthan,谢谢,您喜欢
viewDidAppear和viewWillDisappear注册/注销的原因是什么? -
对于这个通知,它可能并不重要,但通常我不想在视图出现或消失时收到通知,这就是为什么我更喜欢
viewDidAppear。
标签: ios swift uiview nsnotificationcenter uiapplicationdelegate