下面的代码无法生成四分之一圈。但是,如果将端角更改为.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(图片为白色,因此请点击以下下载):
答案 0 :(得分:3)
问题在于您仅绘制圆弧,UIBezierPath
通过在起点处绘制一条线来封闭路径。绘制半圆时,这是可行的,因为绘制的线是圆的直径。
在四分之一圆的情况下,您最终会得到一个将两个端点相连的和弦,但这并不能给您理想的结果。
要解决此问题,请在绘制圆弧后在圆(0, 0)
的中心画一条线。然后,当路径闭合时,它将把另一个半径拉回到圆弧的起点。
新的bezier路径代码:
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))