在swift中屏蔽圆段

在swift中屏蔽圆段,swift,drawing,geometry,masking,Swift,Drawing,Geometry,Masking,我正在创建一个简单的播放器应用程序。有一个圆圈,显示播放歌曲的进度。 用Swift画这个圆圈并制作面具的最佳方法是什么?我假设我可以画一个2圈,将宽度笔划设置为我想要的厚度,而不填充它。根据一些参数,白色的必须被屏蔽。我不知道如何用恰当的方式掩饰它 我最近提出了这个解决方案: class CircularProgressView: UIView { private let floatPi = CGFloat(M_PI) private var progressColor =

我正在创建一个简单的播放器应用程序。有一个圆圈,显示播放歌曲的进度。


用Swift画这个圆圈并制作面具的最佳方法是什么?我假设我可以画一个2圈,将宽度笔划设置为我想要的厚度,而不填充它。根据一些参数,白色的必须被屏蔽。我不知道如何用恰当的方式掩饰它

我最近提出了这个解决方案:

class CircularProgressView: UIView {

    private let floatPi = CGFloat(M_PI)
    private var progressColor = UIColor.greenColor()
    private var progressBackgroundColor = UIColor.grayColor()

    @IBInspectable var percent: CGFloat = 0.11 {
        didSet {
            setNeedsDisplay()
        }
    }
    @IBInspectable var lineWidth: CGFloat = 18

    override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        let origo = CGPointMake(frame.size.width / 2, frame.size.height / 2)
        let radius: CGFloat = frame.size.height / 2 - lineWidth / 2
        CGContextSetLineWidth(context, lineWidth)
        CGContextMoveToPoint(context, frame.width / 2, lineWidth / 2)
        CGContextAddArc(context, origo.x, origo.y, radius, floatPi * 3 / 2, floatPi * 3 / 2 + floatPi * 2 * percent, 0)
        progressColor.setStroke()
        let lastPoint = CGContextGetPathCurrentPoint(context)

        CGContextStrokePath(context)

        CGContextMoveToPoint(context, lastPoint.x, lastPoint.y)
        CGContextAddArc(context, origo.x, origo.y, radius, floatPi * 3 / 2 + floatPi * 2 * percent, floatPi * 3 / 2, 0)
        progressBackgroundColor.setStroke()
        CGContextStrokePath(context)
    }
}
您只需为其设置正确的帧(通过代码或界面生成器),并设置percent属性

此解决方案不使用遮罩或两个圆,只使用两个圆弧,第一个从12点钟开始,到2*Pi*进度百分比,另一个圆弧从上一个圆弧的末端绘制到12点钟

重要提示:
percent
属性必须介于0和1之间

可能重复的