gpt4 book ai didi

swift - 更改多个 CAShapeLayer 的绘制顺序

转载 作者:行者123 更新时间:2023-11-30 12:45:06 25 4
gpt4 key购买 nike

我的程序绘制了几个不同的 CGMutablePaths,每个都属于自己的 CAShapeLayer。 It currently looks like this

注意矩形的线条如何与圆形重叠。 Here is how I want it to look

本质上,我希望椭圆及其填充绘制在矩形线条的顶部。

在我的代码中,我有一个 CAShapeLayers 数组,其中第一个是矩形。在 awakeFromNib() 中,我循环遍历所有形状图层并更新描边宽度和填充等信息,然后手动将矩形的填充颜色更改为不同的。在绘图函数中,我创建了所有路径,首先是矩形,然后是椭圆形。最后,我将这些路径添加到它们的相对形状图层,即矩形后面的椭圆。

我尝试过在每种情况下交换顺序,但没有成功。老实说,我想不出还有什么可能影响抽奖顺序。最奇怪的部分是,在第一张图片中,您会看到左下角的椭圆确实绘制在矩形上方,但在我的代码中没有将其分开。

var shapeLayers: [String: CAShapeLayer] = [
"rectangle": CAShapeLayer(),
"ellipse1": CAShapeLayer(),
"ellipse2": CAShapeLayer()...and so on
]

override func awakeFromNib() {
wantsLayer = true

for (_, shapeLayer) in shapeLayers {
shapeLayer.lineWidth = borderWidth
shapeLayer.strokeColor = ColorScheme.blue.cgColor
shapeLayer.fillColor = ColorScheme.white.cgColor
shapeLayer.path = nil
shapeLayer.lineCap = kCALineCapSquare
layer?.addSublayer(shapeLayer)
}

shapeLayers["rectangle"]?.fillColor = NSColor.clear.cgColor
}

override func draw(_ dirtyRect: NSRect) {
let rectangle = CGMutablePath().addRect(selectionBounds)
let ellipse1 = CGMutablePath().addEllipse(in: CGRect(origin: somePoint, size: someSize))
let ellipse2 = CGMutablePath().addEllipse(in: CGRect(origin: somePoint, size: someSize))
...and so on

shapeLayers["rectangle"]?.path = rectangle
shapeLayers["ellipse1"]?.path = ellipse1
shapeLayers["ellipse2"]?.path = ellipse2...and so on
}

我显然缺少对 shapeLayers 和路径的理解中的一些基本内容。非常感谢您的帮助 - TIA

最佳答案

您可以使用zPosition强制图层按特定顺序绘制。只要数字从后层到前层递增即可,为它们分配任意值即可。

关于swift - 更改多个 CAShapeLayer 的绘制顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com