绘制部分圆

pra*_*awn 1 uibezierpath swift

我正在编写一个程序,它将取一个介于 0 和 1 之间的数字,然后吐出一个圆(或我猜是圆弧),它完成了那么多。

比如输入0.5,程序会输出一个半圆

如果为 0.1,程序将输出一个很小的小弧,最终将是整个圆的 10%。

我可以通过使角度起点为 0 和角度终点来实现此目的 2*M_PI*decimalInput

但是,我需要在圆的顶部有起点,所以起点是3*M_PI_2,终点是7*M_PI_2

我只是在用这些新的起点/终点绘制一个部分完整的圆圈时遇到了麻烦。我承认,我的数学不是最好的,所以任何建议/意见都值得赞赏

这是我到目前为止所拥有的

var decimalInput = 0.75 //this number can be any number between 0 and 1
let start = CGFloat(3*M_PI_2)
let end = CGFloat(7*M_PI_2*decimalInput)

let circlePath = UIBezierPath(arcCenter: circleCenter, radius: circleRadius, startAngle: start, endAngle: end, clockwise: true)

circlePath.stroke()
Run Code Online (Sandbox Code Playgroud)

尽管我尝试过,但我似乎无法做到正确。我认为结束角度是罪魁祸首,除非我以错误的方式解决这个问题

rob*_*off 5

弧长为2 * M_PI * decimalInput。您需要将弧长添加到起始角度,如下所示:

let circleCenter = CGPointMake(100, 100)
let circleRadius = CGFloat(80)
var decimalInput = 0.75
let start = CGFloat(3 * M_PI_2)
let end = start + CGFloat(2 * M_PI * decimalInput)
let circlePath = UIBezierPath(arcCenter: circleCenter, radius: circleRadius, startAngle: start, endAngle: end, clockwise: true)
XCPCaptureValue("path", circlePath)
Run Code Online (Sandbox Code Playgroud)

结果:

弧

请注意,当用于绘制UIView.