功能
防止循环动画在以下情况下被暂停播放:
- UIApplication didEnterBackground
- UIViewController viewDidDisappear
原理
原理是监听动画的控件, 同时传递一个回调函数。在需要恢复动画的时候,就会调用回调来重新运行一次动画。
UIApplication didEnterBackground
监听 UIApplication 的 willEnterForegroundNotification 和didEnterBackgroundNotification, 在APP回到前台的时候调用回调恢复动画
UIViewController viewDidDisappear
替换 UIViewController 的 viewDidAppear 方法,在 viewDidAppear 的调用回调恢复动画
示例代码
/// zoom
public static func zoom(view: UIView,
from min: CGFloat = 0.8, to max: CGFloat = 1.5,
duration: TimeInterval = 0.6,
repeats: Bool = true) {
let animations: [Animation] = [
AnimationType.zoom(scale: min),
AnimationType.zoom(scale: max),
AnimationType.zoom(scale: 1.0),
]
let options: UIView.AnimationOptions = [.repeat, .autoreverse, .curveLinear,
.curveEaseInOut, .allowUserInteraction]
view.animate(animations: animations, reversed: false,
initialAlpha: 1, finalAlpha: 1, delay: 0,
duration: duration, options: options) {}
// Deamon Animation
AnimationDeamon.deamon(view: view) { (view) in
zoom(view: view, from: min, to: max, duration: duration, repeats: repeats)
}
}