Swift 显示圆的一部分

Swift 显示圆的一部分,swift,Swift,我想显示圆的任意部分。 我知道如何使用layer.cornerRadius获得圆视图,现在我只想看到圆的一部分(对于任何给定的辐射值)。如果它的其余部分只是隐藏在白色的东西下面,那就好了。 有什么想法,如何实现 编辑: 我已经为我的观点编写了一个类: class Circle:UIView { var rad = 0 let t = CGFloat(3.0) override func draw(_ rect: CGRect) { super.draw(rec

我想显示圆的任意部分。 我知道如何使用
layer.cornerRadius
获得圆视图,现在我只想看到圆的一部分(对于任何给定的辐射值)。如果它的其余部分只是隐藏在白色的东西下面,那就好了。 有什么想法,如何实现

编辑: 我已经为我的观点编写了一个类:

class Circle:UIView {
var rad = 0

    let t = CGFloat(3.0)

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        let r = self.frame.width / CGFloat(2)
        let center = CGPoint(x: r, y: r)
        let path = UIBezierPath()

        path.move(to: CGPoint(x: t, y: r))

        path.addLine(to: CGPoint(x: 0.0, y: r))

        path.addArc(withCenter: center, radius: CGFloat(r), startAngle: CGFloat(Double.pi), endAngle: CGFloat(Double.pi+rad), clockwise: true)

        let pos = path.currentPoint
        let dx = r - pos.x
        let dy = r - pos.y
        let d = sqrt(dx*dx+dy*dy)
        let p = t / d
        path.addLine(to: CGPoint(x: pos.x + p * dx, y: pos.y + p * dy))
        path.addArc(withCenter: center, radius: r-t, startAngle: CGFloat(Double.pi+rad), endAngle: CGFloat(Double.pi), clockwise: false)


        UIColor(named: "red")?.setFill()
        path.fill()
    }
}

public func setRad(perc:Double) {
    rad = Double.pi * 2 * perc

}
在我的视图控制器中,我调用

    circleView.layer.cornerRadius = circleView.frame.size.width / 2
    circleView.clipsToBounds = true
    circleView.layer.borderWidth = 1
    circleView.layer.borderColor = UIColor.darkGray.cgColor

    circleView.layer.shadowColor = UIColor.black.cgColor
    circleView.layer.shadowOpacity = 1
    circleView.layer.shadowOffset = CGSize.zero
    circleView.layer.shadowRadius = 3
    circleView.layer.masksToBounds = false

    circleView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.onTap)))

现在,我得到了一个完整的正方形视图,从拐角处画了一个黑色的圆圈和我画的红色弧线。如果有必要,我明天将发布一张图片

一种方法是绘制一条
UIBezierPath

如果只需要一个圆弧,可以调用
init(arcCenter:radius:startAngle:endAngle:顺时针:)
初始值设定项。请记住以弧度为单位指定起点和终点角度

之后,您可以设置笔划颜色并调用
stroke


如果需要圆的扇区,可以使用无参数初始值设定项创建一个
UIBezierPath
,然后
移动(到:)
圆的中心,然后
添加直线(到:)
弧的起点。你可以用三角法计算出这个点的位置。在那之后,像我上面描述的那样调用
addArc
,然后
addLine(to:)
您开始的点。之后,您可以
填充路径。

UIBezierPath是您的助手。好的,我绘制了圆弧,但现在除了通过设置获得的边框外,我还可以看到原始边框cornerRadius@Ginso然后,不要设置角半径或边框,而是在
draw(:)中完全绘制所需的视图
。但是,即使我不调用super.draw并使用uibezierro以清晰的颜色填充整个帧,我也会看到一个白色的视图。你到底想画什么?你能给我看张照片吗@金索