没有连接线怎么画两条弧线?

时间:2018-06-26 10:16:56

标签: swift core-graphics cgpath

我正在使用print绘制wifi徽标。当我用u = pysql("SELECT * from flight f join iata i on (f.ORIGIN = i.IATA);") 绘制第二条弧线时,它将自动绘制一条类似于CGMutablePath指定的文档的线。没有这条线怎么画?谢谢

3 个答案:

答案 0 :(得分:4)

如果要绘制没有上一条直线的圆弧,则需要在添加圆弧之前使用move(to:)将路径移动到圆弧的起点。弧的起点可以计算为:

center.x + radius * cos(startAngle)
center.y + radius * sin(startAngle)

您可以利用CGPath的功能来创建笔触副本,而不必自己计算点来创建每个弧的轮廓。这样做,您只需为图标的每个“栏”创建一个弧形的基本路径:

let basePath = CGMutablePath()

let center     = CGPoint.zero
let startAngle = CGFloat.pi * 0.75 // 135 degrees
let endAngle   = CGFloat.pi * 0.25 //  45 degrees

let radii: [CGFloat] = [10, 20, 30, 40]

for radius in radii {
    // Move to the start point of the arc
    basePath.move(to: CGPoint(x: center.x + radius * cos(startAngle),
                              y: center.y + radius * sin(startAngle)))
    // Add the arc, starting at that same point
    basePath.addArc(center: center, radius: radius,
                    startAngle: startAngle, endAngle: endAngle,
                    clockwise: true)
}

这将创建这样的基本形状,而没有任何厚度:

Base path

接下来,您通过描边创建基本路径的副本。在这里,您可以配置图标栏的粗细及其末端的样式(正方形或圆形):

let stroked = basePath.copy(strokingWithWidth: 5, // The width/thickness of each stroked arc
                            lineCap: .square,     // Make square corners for the ends of each arc
                            lineJoin: .miter, miterLimit: 0)

产生这样的形状:

Stroked path

答案 1 :(得分:0)

在添加第二条弧之前只需使用move(to:transform:)。查看更多详细信息here

答案 2 :(得分:0)

是的,El Tomato告诉您您需要做什么。由于addArc(center:radius:startAngle:endAngle:clockwise:transform:)会从路径的最后一点到弧的起点画一条线,因此需要先使用move(to:transform:)首先移至新弧的起点,然后再添加它。

如果addArc(center:radius:startAngle:endAngle:clockwise:transform:)带有一个标志来控制是否在其起点上画线,那将是很好的选择,但这似乎没有。

计算起点需要一些时间。