我有一个播放音频的UIView,有一个NSTimer和进度圆棒动画。
为了简单起见,如果用户切换应用或接听电话,我希望所有进程都停止并自行重置。
我建议使用:
调用观察者 - 可能在viewWillAppear
:
override func viewWillAppear(animated: Bool) {
// set observer for WillEnterForeground
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil)
...}
和
停止相关任务:
// Stop all audio, timer and animation if app enters background.
func willEnterBackground() {
myAudioPlayer.stop()
myAudioPlayer.currentTime = 0
swiftTimer.invalidate()
swiftCounter = 60
timerLabel.text = String(swiftCounter)
pauseBtn.alpha = 1.0
playBtn.alpha = 1.0
stopBtn.alpha = 1.0
currentCount = 0
circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil)
}
解雇观察员:
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)
.... }
加载和解散观察者的正确位置在哪里?我已阅读说明使用viewDidLoad
/ deinit
,viewWillAppear / Disappear
等的线程。
任何人都可以详细说明我的方案推荐的内容,以及当前和可能保留的可用内容。在未来(语言和实践似乎在编程世界中迅速变化)。
我使用上面的正确语法吗?
谢谢!
答案 0 :(得分:1)
对我来说,一切似乎都是正确的
确保在每种方法中调用super实现。这样可以 当你稍后继承子事时会导致一些问题
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated);
// other code
...}
// same for viewWillDisappear