在 Core Graphics 中以给定角度向圆添加线条 Swift

Add lines to the circle at a given angle in Core Graphics Swift

我这样创建这个圆视图:

override func draw(_ rect: CGRect) {
        super.draw(rect)
        
        if let context = UIGraphicsGetCurrentContext()
        {
            let width = fmin(self.frame.size.width, self.frame.size.height)
            let offset_x = abs(width - self.frame.size.width)/2
            let offset_y = abs(width - self.frame.size.height)/2
            let padding = CGFloat(0.5)
            let radius_size = (width/2) - (padding*2)
            let circle_width = radius_size/4
            
            context.setStrokeColor(UIColor.black.cgColor)
            
            // Draw a circle
            for i in 0 ..< 4
            {
                let offset = CGFloat(i) * circle_width
                
                context.strokeEllipse(in:
                        CGRect(
                            x: padding + offset + offset_x,
                            y: padding + offset + offset_y,
                            width: (radius_size - offset)*2,
                            height: (radius_size - offset)*2))
            }
            
            context.strokePath()
        }
    }

如果我有最上面的圆的角度数组,我如何创建一条到圆心的线?我怎样才能对中间的圆圈做同样的事情? 例如,我有一个数组,给定的角度为度数:[87.0, 112.0, 150.0]

这是一个函数 drawLine,它从 center 点到 angle 点绘制一条线,具有特定的 radius。要更改线到达的圆圈,只需更改 radius:

override func draw(_ rect: CGRect) {
    super.draw(rect)
    
    if let context = UIGraphicsGetCurrentContext()
    {
        let width = fmin(self.frame.size.width, self.frame.size.height)
        let offset_x = abs(width - self.frame.size.width)/2
        let offset_y = abs(width - self.frame.size.height)/2
        let padding = CGFloat(0.5)
        let radius_size = (width/2) - (padding*2)
        let circle_width = radius_size/4
        
        context.setStrokeColor(UIColor.black.cgColor)
        
        // Draw a circle
        for i in 0 ..< 4
        {
            let offset = CGFloat(i) * circle_width
            
            context.strokeEllipse(in:
                    CGRect(
                        x: padding + offset + offset_x,
                        y: padding + offset + offset_y,
                        width: (radius_size - offset)*2,
                        height: (radius_size - offset)*2))
        }
        
        let angles: [CGFloat] = [87.0, 112.0, 150]
        let angles2: [CGFloat] = [210.0, 250.0, 330.0]
        let center = CGPoint(x: width/2 + offset_x, y: width/2 + offset_y)
        
        for angle in angles {
            drawLine(context: context, center: center, radius: radius_size, angle: angle)
        }
        
        for angle in angles2 {
            drawLine(context: context, center: center, radius: radius_size * 3 / 4, angle: angle)
        }
        
        context.strokePath()

    }
}

func drawLine(context: CGContext, center: CGPoint, radius: CGFloat, angle: CGFloat) {
    context.move(to: center)
    context.addLine(to: CGPoint(x: center.x + radius * cos(angle * .pi / 180), y: center.y - radius * sin(angle * .pi / 180)))
}