如何正确快速复制CAShapeLayer?

问题描述 投票:1回答:1

我正在尝试快速创建CAShapeLayer的副本,但是崩溃了>>

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[CAShapeLayer copyWithZone:]:无法识别的选择器已发送到实例0x282e87e60'

我应该采取哪些额外的步骤来允许CALayer .copy()在不导致应用程序崩溃的情况下工作?即使我不转换.copy()的结果,它仍然在该copy()行中完全失败...

private var drawLines: [CAShapeLayer]
func getCopiedLayers() -> [CAShapeLayer] {
    return drawLines.compactMap { layer -> CAShapeLayer? in
        return layer.copy() as? CAShapeLayer
    }
}

我在这里做错了什么?预先感谢您的回答

我正在尝试快速创建CAShapeLayer的副本,但由于未捕获的异常'NSInvalidArgumentException'而导致崩溃的终止应用程序,原因:'-[CAShapeLayer copyWithZone:]:...

swift cashapelayer
1个回答
1
投票
[CALayer不符合API中的NSCopying,但符合NSSecureCoding,因此可以如下添加复制功能

0
投票
也许使用NSCoding存档/未存档?

private var drawLines: [CAShapeLayer] = [] func getCopiedLayers() -> [CAShapeLayer] { return drawLines.compactMap { layer -> CAShapeLayer? in return try? NSKeyedUnarchiver.unarchivedObject(ofClass: CAShapeLayer.self, from: NSKeyedArchiver.archivedData(withRootObject: layer, requiringSecureCoding: false)) } }

© www.soinside.com 2019 - 2024. All rights reserved.