我正在使用print
绘制wifi徽标。当我用u = pysql("SELECT * from flight f join iata i on (f.ORIGIN = i.IATA);")
绘制第二条弧线时,它将自动绘制一条类似于CGMutablePath
指定的文档的线。没有这条线怎么画?谢谢
答案 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)
}
这将创建这样的基本形状,而没有任何厚度:
接下来,您通过描边创建基本路径的副本。在这里,您可以配置图标栏的粗细及其末端的样式(正方形或圆形):
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)
产生这样的形状:
答案 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:)
带有一个标志来控制是否在其起点上画线,那将是很好的选择,但这似乎没有。
计算起点需要一些时间。