CAAnimation:将视图的 alpha 与表示层的不透明度同步
CAAnimation: Syncing view's alpha with presentation layer's opacity
我正在使用 CAKeyframeAnimation
为视图层的 opacity
设置动画,当应用程序进入后台时,动画被移除,但我需要使视图的 alpha 与动画,我该怎么做:
view.alpha = view.layer.presentationLayer.opacity
???
谢谢!
更新:
我有三个相互重叠的标签,我使用关键帧动画为它们的 opacity
设置不同关键帧值(对于 opacity
)的动画,以模仿交叉淡入淡出动画。问题是当应用程序进入后台时,动画被删除(根据 https://forums.developer.apple.com/thread/15796)所以它们都有 alpha 1 并且彼此重叠,这就是为什么我想将视图与它们的表示层同步。
如果目标是在应用程序进入后台时捕获 opacity
,您可以为 UIApplicationDidEnterBackground
添加一个观察者,捕获不透明度,取消动画,并设置 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
}
}
}
如果您的目标是即使应用程序终止也能记住它,那么您需要将其保存在持久性存储中。但是,如果您的目标只是在应用程序在后台暂停 and/or 运行 时设置 alpha
,则以上内容就足够了。
我正在使用 CAKeyframeAnimation
为视图层的 opacity
设置动画,当应用程序进入后台时,动画被移除,但我需要使视图的 alpha 与动画,我该怎么做:
view.alpha = view.layer.presentationLayer.opacity
???
谢谢!
更新:
我有三个相互重叠的标签,我使用关键帧动画为它们的 opacity
设置不同关键帧值(对于 opacity
)的动画,以模仿交叉淡入淡出动画。问题是当应用程序进入后台时,动画被删除(根据 https://forums.developer.apple.com/thread/15796)所以它们都有 alpha 1 并且彼此重叠,这就是为什么我想将视图与它们的表示层同步。
如果目标是在应用程序进入后台时捕获 opacity
,您可以为 UIApplicationDidEnterBackground
添加一个观察者,捕获不透明度,取消动画,并设置 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
}
}
}
如果您的目标是即使应用程序终止也能记住它,那么您需要将其保存在持久性存储中。但是,如果您的目标只是在应用程序在后台暂停 and/or 运行 时设置 alpha
,则以上内容就足够了。