【问题标题】:How can I create a new CALayer from a Presentation Layer?如何从表示层创建新的 CALayer?
【发布时间】:2019-06-13 04:10:57
【问题描述】:

我正在捕捉动画视图的帧,我想用它来创建一个新的CALayer 以添加到视图中。这是我目前拥有的代码,但什么都没有出现;

let screenshot = animatedView.layer.presentation() let newLayer = CALayer.init(layer: screenshot) self.view.layer.addSublayer(newLayer)

感谢您的帮助:)

【问题讨论】:

    标签: ios swift calayer


    【解决方案1】:

    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 - 不过感谢您的洞察力!
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2022-06-22
    • 2018-11-19
    相关资源
    最近更新 更多