使用strokeColor,从中心到圆周画一条线

Posted

技术标签:

【中文标题】使用strokeColor,从中心到圆周画一条线【英文标题】:With strokeColor, a line is drawn from the center to the circumference 【发布时间】:2018-05-06 07:20:37 【问题描述】:

我正在使用 swift 4。 我写了下面的代码,并尝试用笔画画一个圆圈。 但是,使用下面的代码,我无法画出我想要的圆圈。 问题是线是从圆心到外围绘制的(严格来说,是朝向'startAngle'属性的坐标点)。 我想擦掉线,怎么办? (我准备了一张图片。)

class Something

    var line:[CAShapeLayer] = []
    var path:[UIBezierPath] = []

    func drawingNow()
            let layer = CAShapeLayer()
            self.layer.addSublayer(layer)
            self.line.append(layer)

            let addPath: UIBezierPath = UIBezierPath()
            addPath.move(to: CGPoint(x: 100, y: 100))
            addPath.addArc(
                withCenter: CGPoint(x: 100, y: 100),
                radius: CGFloat(50),
                startAngle: CGFloat(//someangle),
                endAngle: CGFloat(//someangle),
                clockwise: true
            )

            self.path.append(addPath)

            //self.line.last!.strokeColor = etc... (If don't use "override func draw()")
            self.line.last!.fillColor = UIColor.clear.cgColor
            self.line.last!.path = addPath.cgPath

            self.setNeedsDisplay()
    

    override func draw(_ rect: CGRect) 
        if self.path.count != 0
            UIColor.orange.setStroke()
            self.path.last!.stroke()
        
    

Image

【问题讨论】:

尝试删除addPath.move(to: CGPoint(x: 100, y: 100)) 感谢您的回答!!我用你的回答解决了这个问题XD谢谢谢谢谢谢 @Sweeper 如果可以,请写下答案。所以我想检查一下。 【参考方案1】:

调用addPath.move(to: CGPoint(x: 100, y: 100))后,UIBezierPath 移动到了指定坐标。现在你告诉它从那里添加一个圆弧 ,中心为 (100, 100)。要画一个圆心(100, 100)的圆弧,首先需要移动到圆周上。但此时它已经开始绘制了!这就是addArc 的工作原理。 addLine 也是如此。看docs:

此方法添加从当前点开始的指定弧。

所以弧总是从当前点开始,即 (100, 100)。

与其告诉它先移动到中心,不如告诉它通过移除 move(to:)` 线来绘制弧线。

【讨论】:

这是最好的答案。

以上是关于使用strokeColor,从中心到圆周画一条线的主要内容,如果未能解决你的问题,请参考以下文章

Swift 从一个圆的中心到另一个圆的边缘画一条线

从 Activity 用画布画一条线

SwiftUI:在列表中的两个视图之间画一条线/如何确定视图的中心位置?

从两个按钮之间的手势画一条线

从 UIViewController 画一条线

如何在HTML中画一条线