在Swift中填充一条未封闭的bezier路径

时间:2018-03-22 04:58:13

标签: swift cocoa sprite-kit quartz-graphics

我正在尝试创建一个类似左边的图像。我有一个NSBezier路径(不是封闭路径)但是当我填充它时,它似乎只产生右边的图像。我想填补路径,但只填写循环部分。有什么建议吗?

The loops on the left is what I am trying to create

 UIGraphicsBeginImageContext(board.size)
            if let context = UIGraphicsGetCurrentContext() {
                if let path = snake.path {
                    context.setShouldAntialias(false)
                    let transformedPath = CGMutablePath()
                    transformedPath.addPath(path, transform: transform)
                    context.addPath(transformedPath)
                    context.setLineJoin(.round)
                    context.setLineCap(.round)
                    context.setLineWidth(snake.thickness)
                    context.setStrokeColor(UIColor.magenta.cgColor)
                    context.strokePath()
                    context.fillPath()

                }

                if let newImage = UIGraphicsGetImageFromCurrentImageContext()?.cgImage {
                    board.texture = SKTexture(cgImage: newImage)
                }
            }

            UIGraphicsEndImageContext()

1 个答案:

答案 0 :(得分:1)

您没有阅读strokePath documentation,其中说:

  

当前路径被清除为调用此函数的副作用。

因此,当您致电fillPath时,当前路径为空。没有什么可以填补的。在调用context.addPath(transformedPath)之前,您需要再次调用fillPath来重新设置路径。

如果您想先填充然后填充,请拨打使用context.drawPath(using: .fillStroke)。此方法填充,然后描边当前路径(然后清除当前路径)。

另外,您没有设置上下文的填充颜色。默认填充颜色为黑色,可能不是您想要的颜色。