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

在Core Graphics Swift中以给定角度向圆添加线,swift,core-graphics,Swift,Core Graphics,我创建的圆形视图如下所示: override func draw(rect:CGRect){ 超级绘图(矩形) 如果let context=UIGraphicsGetCurrentContext() { let width=fmin(self.frame.size.width,self.frame.size.height) 让偏移量_x=abs(宽度-自帧大小/宽度)/2 让偏移量_y=abs(宽度-自身框架尺寸高度)/2 让填充=CGFloat(0.5) 让半径大小=(宽度/2)-(填充*2

我创建的圆形视图如下所示:

override func draw(rect:CGRect){
超级绘图(矩形)
如果let context=UIGraphicsGetCurrentContext()
{
let width=fmin(self.frame.size.width,self.frame.size.height)
让偏移量_x=abs(宽度-自帧大小/宽度)/2
让偏移量_y=abs(宽度-自身框架尺寸高度)/2
让填充=CGFloat(0.5)
让半径大小=(宽度/2)-(填充*2)
让圆宽度=半径大小/4
context.setStrokeColor(UIColor.black.cgColor)
//画圈
对于0..<4中的i
{
让偏移量=CGFloat(i)*圆的宽度
context.strokeEllipse(在:
CGRect(
x:填充+偏移+偏移x,
y:填充+偏移+偏移y,
宽度:(半径大小-偏移)*2,
高度:(半径_尺寸-偏移)*2)
}
context.strokePath()
}
}
如果我有一个数组,如何为最顶端的圆创建一条到圆心的直线?对于中间的圆圈,我该怎么做呢?
例如,我有一个数组,给定的角度以度为单位:[87.0,112.0,150.0]

这里有一个函数
drawLine
,它从
中心
点以
角度
以特定的
半径
绘制一条线。要更改直线到达的圆,只需更改
半径

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)))
}
override func draw(rect:CGRect){
超级绘图(矩形)
如果let context=UIGraphicsGetCurrentContext()
{
let width=fmin(self.frame.size.width,self.frame.size.height)
让偏移量_x=abs(宽度-自帧大小/宽度)/2
让偏移量_y=abs(宽度-自身框架尺寸高度)/2
让填充=CGFloat(0.5)
让半径大小=(宽度/2)-(填充*2)
让圆宽度=半径大小/4
context.setStrokeColor(UIColor.black.cgColor)
//画圈
对于0..<4中的i
{
让偏移量=CGFloat(i)*圆的宽度
context.strokeEllipse(在:
CGRect(
x:填充+偏移+偏移x,
y:填充+偏移+偏移y,
宽度:(半径大小-偏移)*2,
高度:(半径_尺寸-偏移)*2)
}
让角度:[CGFloat]=[87.01112.0150]
让角度2:[CGFloat]=[210.0250.0330.0]
设中心=CGPoint(x:width/2+offset\ux,y:width/2+offset\uy)
角中的角{
绘制线(上下文:上下文,中心:中心,半径:半径\尺寸,角度:角度)
}
对于角度中的角度2{
绘制线(上下文:上下文,中心:中心,半径:半径大小*3/4,角度:角度)
}
context.strokePath()
}
}
func绘制线(上下文:CGContext,中心:CGPoint,半径:CGFloat,角度:CGFloat){
上下文。移动(到:中心)
addLine(到:CGPoint(x:center.x+半径*cos(角度*.pi/180),y:center.y-半径*sin(角度*.pi/180)))
}

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)))
}