Swift:使用 SKCropNode 创建四分之一圆不起作用

Swift: creating quarter circle with SKCropNode not working

下面的代码无法生成四分之一圆。但是,如果将结束角度更改为 .pi,代码会按预期生成一个半圆。

为什么四分之一圈失败?

    // Create circle
    let circleSize = CGSize(width: width, height: width)
    let circle = SKSpriteNode(texture: SKTexture(imageNamed: "Dot.png"), color: color, size: circleSize)
    circle.colorBlendFactor = 1.0

    // Add circle to crop node
    let cropNode = SKCropNode()
    cropNode.addChild(circle)

    // Set crop node mask
    let bezierPath = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: width/2, startAngle: 0, endAngle: .pi/2, clockwise: true)
    let maskNode = SKShapeNode(path: bezierPath.cgPath)
    maskNode.isAntialiased = false
    maskNode.lineWidth = 0
    maskNode.fillColor = color
    cropNode.maskNode = maskNode

Dot.png(图片为白色点击下方下载):

问题是您只画了圆弧,UIBezierPath 通过画一条线回到起点来关闭路径。当你画一个半圆时,这是有效的,因为画的线是圆的直径。

在四分之一圆的情况下,您最终会得到一个连接两个端点的弦,但这不会给您想要的结果。

要解决此问题,请在绘制圆弧后在圆心画一条线 (0, 0)。然后当路径闭合时,它会把另一个半径拉回圆弧的起点。

新 bezierPath 代码:

let bezierPath = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: width/2, startAngle: 0, endAngle: .pi/2, clockwise: true)
bezierPath.addLine(to: CGPoint(x: 0, y: 0))