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之前停止。这是一种非常常见的模式:获取表示层值、停止动画、重置视图属性。