【发布时间】:2019-06-13 04:10:57
【问题描述】:
我正在捕捉动画视图的帧,我想用它来创建一个新的CALayer 以添加到视图中。这是我目前拥有的代码,但什么都没有出现;
let screenshot = animatedView.layer.presentation()
let newLayer = CALayer.init(layer: screenshot)
self.view.layer.addSublayer(newLayer)
感谢您的帮助:)
【问题讨论】:
我正在捕捉动画视图的帧,我想用它来创建一个新的CALayer 以添加到视图中。这是我目前拥有的代码,但什么都没有出现;
let screenshot = animatedView.layer.presentation()
let newLayer = CALayer.init(layer: screenshot)
self.view.layer.addSublayer(newLayer)
感谢您的帮助:)
【问题讨论】:
presentation() 只是返回 layer 在屏幕上显示的副本。
试试这样:
if let screenshot = animatedView.layer.presentation() {
let modelLayer = CALayer(layer: screenshot)
self.view.layer.addSublayer(modelLayer)
}
您还可以确保在调用 presentation() 之前先布置 layer
animatedView.layer.setNeedsLayout()
编辑:我的错误 - 我猜无法将副本添加为子图层。编辑上面的代码以包含来自演示文稿副本的 CALayer 的正确实例化。
【讨论】:
Terminating app due to uncaught exception 'CALayerInvalidTree', reason: 'expecting model layer not copy: <CALayer: 0x600000be64a0>'
animatedView 制作动画还是在为animatedView.layer 制作动画?对于前者,我认为使用视图层的presentation() 不会起作用(为此,您需要获得ImageContext)。如果是这样,请告诉我。
ImageContext - 不过感谢您的洞察力!