我有一个UIBezierPaths数组,我正在循环遍历它来创建CALayer。生成CALayer的代码如下:
Original Answer翻译成"最初的回答"
let layer = CAShapeLayer()
layer.path = path.cgPath
layer.strokeColor = UIColor.gray.cgColor
layer.fillColor = UIColor.clear.cgColor
layer.lineWidth = 3
layer.lineJoin = .bevel
return layer
当每一层返回时,我将其添加到一个更大的图层(
shapeLayer
),该图层然后添加到UIView
图层中。(希望这有意义)。我遇到的问题是居中循环添加的子图层(在finalShape内)。它们显然使用
path.cgPath
设置了特定的路径,而我不知道如何在保持它们的位置的同时实现这一点。我对CALayer的了解显然不足以解决这个问题,非常感谢任何帮助。谢谢。
-- 如果我向您展示整个代码可能会更有帮助
private let shapeLayer = CALayer()
func bind(shape: Shape) {
let data = NSKeyedUnarchiver.unarchiveObject(with: shape.strokeData)
guard let paths = data as? [UIBezierPath] else { return }
for path in paths {
let guideLine = drawPathLayer(for: path)
shapeLayer.addSublayer(guideLine)
}
layer.addSublayer(shapeLayer)
}
private func drawPathLayer(for path: UIBezierPath) -> CALayer {
let layer = CAShapeLayer()
layer.path = path.cgPath
layer.strokeColor = UIColor.gray.cgColor
layer.fillColor = UIColor.clear.cgColor
layer.lineWidth = 3
layer.lineJoin = .bevel
return layer
}