我使用opacity
设置了视图图层的CAKeyframeAnimation
动画,当app转到后台时,动画被移除,但我需要制作如果我这样做,则视图的alpha与动画相同:
view.alpha = view.layer.presentationLayer.opacity
???
谢谢!
更新
我有三个标签相互重叠,我使用关键帧动画来设置opacity
的动画,使用不同的关键帧值(opacity
)来模仿交叉渐变动画。问题是当应用程序转到后台时,动画会被移除(根据https://forums.developer.apple.com/thread/15796),因此它们都具有alpha 1并且彼此重叠,这就是为什么我想要将视图与其表示层同步的原因
答案 0 :(得分:0)
如果目标是在应用程序进入后台时捕获opacity
,则可以为UIApplicationDidEnterBackground
添加观察者,捕获不透明度,取消动画并设置alpha
。例如,在斯威夫特:
class ViewController: UIViewController {
@IBOutlet weak var viewToAnimate: UIView!
private var observer: NSObjectProtocol!
override func viewDidLoad() {
super.viewDidLoad()
observer = NotificationCenter.default.addObserver(forName: .UIApplicationDidEnterBackground, object: nil, queue: .main) { [weak self] notification in
if let opacity = self?.viewToAnimate.layer.presentation()?.opacity {
self?.viewToAnimate.layer.removeAllAnimations()
self?.viewToAnimate.alpha = CGFloat(opacity)
}
}
}
deinit {
NotificationCenter.default.removeObserver(observer)
}
// I'm just doing a basic animation, but the idea is the same whatever animation you're doing
@IBAction func didTapButton(_ sender: Any) {
UIView.animate(withDuration: 10) {
self.viewToAnimate.alpha = 0
}
}
}
如果您的目标是即使应用程序被终止也要记住它,那么您需要将其保存在持久存储中。但是,如果您的目标是仅在应用暂停和/或在后台运行时设置alpha
,则上述内容就足够了。