UIView.animate() 在视图唤醒时冻结
UIView.animate() freezes when view wakes up
我正在使用以下内容无限循环 UIView 动画
UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
self.someLabel.alpha = 0.3
}, completion: nil)
这工作正常,但是当 viewController 唤醒时动画冻结在原处。
运行 与上面 viewDidWakeUp()
中相同的代码无法修复它。
如何让动画不冻结,或者在 viewController 唤醒时从停止的地方继续播放。
澄清一下,'wake up' 是指以下任一情况:
- 关闭应用程序并再次打开,viewController 处于活动状态,
- 休眠 phone 然后唤醒它 viewController 仍然活跃
添加两个通知 willEnterForegroundNotification 和 didEnterBackgroundNotification。
同样值得注意。在某些情况下,您需要重置动画 属性 以使新动画生效。我可以通过动画转换来证实这一点。
刚刚打电话...
view.layer.removeAllAnimations()
self.someLabel.alpha = 1.0
//完整代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
NotificationCenter.default.addObserver(self, selector:#selector(didEnterForeground) , name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(didEnterBackground) , name: UIApplication.didEnterBackgroundNotification, object: nil)
}
@objc func didEnterBackground() {
view.layer.removeAllAnimations()
self.someLabel.alpha = 1.0
}
@objc func didEnterForeground() {
DispatchQueue.main.async {
self.animation()
}
}
func animation() {
UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
self.someLabel.alpha = 0.3
}, completion: nil)
}
我正在使用以下内容无限循环 UIView 动画
UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
self.someLabel.alpha = 0.3
}, completion: nil)
这工作正常,但是当 viewController 唤醒时动画冻结在原处。
运行 与上面 viewDidWakeUp()
中相同的代码无法修复它。
如何让动画不冻结,或者在 viewController 唤醒时从停止的地方继续播放。
澄清一下,'wake up' 是指以下任一情况:
- 关闭应用程序并再次打开,viewController 处于活动状态,
- 休眠 phone 然后唤醒它 viewController 仍然活跃
添加两个通知 willEnterForegroundNotification 和 didEnterBackgroundNotification。
同样值得注意。在某些情况下,您需要重置动画 属性 以使新动画生效。我可以通过动画转换来证实这一点。
刚刚打电话...
view.layer.removeAllAnimations()
self.someLabel.alpha = 1.0
//完整代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
NotificationCenter.default.addObserver(self, selector:#selector(didEnterForeground) , name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(didEnterBackground) , name: UIApplication.didEnterBackgroundNotification, object: nil)
}
@objc func didEnterBackground() {
view.layer.removeAllAnimations()
self.someLabel.alpha = 1.0
}
@objc func didEnterForeground() {
DispatchQueue.main.async {
self.animation()
}
}
func animation() {
UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
self.someLabel.alpha = 0.3
}, completion: nil)
}