Ios CAAnimation:同步视图';带表示层的s alpha';不透明度
我正在使用Ios CAAnimation:同步视图';带表示层的s alpha';不透明度,ios,animation,calayer,caanimation,cakeyframeanimation,Ios,Animation,Calayer,Caanimation,Cakeyframeanimation,我正在使用CAKeyframeAnimation为视图层的不透明度设置动画,当应用程序转到背景时,动画将被删除,但我需要使视图的alpha与动画相同,我应该: view.alpha = view.layer.presentationLayer.opacity 谢谢 更新: 我有三个相互重叠的标签,我使用关键帧动画以不同的关键帧值(对于不透明度)来模拟交叉淡入淡出动画。问题是当应用程序进入背景时,动画会被删除(根据),因此它们都有alpha 1并且彼此重叠,这就是为什么我想将视图与它们的表示层
CAKeyframeAnimation
为视图层的不透明度设置动画,当应用程序转到背景时,动画将被删除,但我需要使视图的alpha与动画相同,我应该:
view.alpha = view.layer.presentationLayer.opacity
谢谢
更新:
我有三个相互重叠的标签,我使用关键帧动画以不同的关键帧值(对于不透明度
)来模拟交叉淡入淡出动画。问题是当应用程序进入背景时,动画会被删除(根据),因此它们都有alpha 1并且彼此重叠,这就是为什么我想将视图与它们的表示层同步。如果目标是在应用程序进入背景时捕获不透明度
,您可以为UIApplicationIdentinterBackground
添加观察者,捕获不透明度,取消动画,并设置alpha
。例如,在Swift中:
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 < /代码>,以上就足够了。顺便说一下,我不知道你的动画是什么,但是你可以考虑使用<代码> UIVIEW属性动画器< /代码>,在这种情况下,当应用程序离开前台时,您可以pauseAnimation
,当应用程序重新进入前台时,您可以startAnimation
将其恢复。但是如果不知道你的动画是什么,就很难说得更具体。@Rob嗨,谢谢,我来试试。我用动画的细节更新了我的问题。谢谢,我会勾选你的答案。实际上,当应用程序进入后台时,动画会自动删除,我不知道这一点,并且在切换应用程序时看到一些奇怪的行为,在看到链接中的答案后,当应用程序进入前台时,我会重新添加动画。我有三个相互重叠的标签,我用不同的关键帧值为它们的不透明度
设置动画,以模拟交叉淡入效果,但是当动画被删除时,它们都有alpha 1,因此它们彼此重叠。我之所以停止动画,不是因为我认为当应用程序进入后台时它们不会停止,而是因为我想在设置alpha之前停止。这是一种非常常见的模式:获取表示层值、停止动画、重置视图属性。