圆形贝塞尔曲线路径不正确

麦卡

我需要在视图中绘制饼图。我已经正确绘制了背景路径。但是,当我添加进度层时,路径无法正确绘制。

这是我用来创建图层并将其添加到视图中的代码。

我也创建了要点。您也可以从那里看到完整的代码。多色派吉斯特

private lazy var pathLayers: [PieLayer] = {

        guard let data = self.data else { return [] }

        var previousPercentage: CGFloat = 0
        let sorted = data.sorted(by: { (data1, data2) -> Bool in
            return data1.percentage < data2.percentage
        })

        var layers: [PieLayer] = []
        for (index, item) in sorted.enumerated() {
            previousPercentage += item.percentage
            let layer = PieLayer()
            layer.index = index
            layer.lineCap = CAShapeLayerLineCap.square
            layer.fillColor = nil
            layer.strokeColor = item.color.cgColor
            layer.strokeEnd = previousPercentage //item.percentage
            layer.percentage = previousPercentage //item.percentage
            layers.append(layer)
        }
        return layers
}()

override func layoutSubviews() {
        super.layoutSubviews()
        self.addShapes()
}

func addShapes() {
        shapeLayer.path = commonPath.cgPath
        shapeLayer.lineWidth = lineWidth
        self.layer.addSublayer(shapeLayer)

        for layer in pathLayers.reversed() {
            print("\(layer.index) - \(layer.percentage)")
            layer.lineWidth = lineWidth
            layer.path = commonPath.cgPath
            self.layer.addSublayer(layer)
        }

}

我用这段代码创建路径,

private var commonPath: UIBezierPath {
        get {
            let x = self.frame.width/2
            let y = self.frame.height/2
            let center = CGPoint(x: x, y: y)
            let path = UIBezierPath(arcCenter: center, radius: CGFloat(x - lineWidth/2), startAngle: -90.degreesToRadians, endAngle: 270.degreesToRadians, clockwise: true)
            path.close()
            return path
        }
}

有谁知道为什么会这样吗?(似乎不是从-90开始)

在此处输入图片说明

在此处输入图片说明

几行代码

您应该设置适当CGLineCap你有CGLineCap.square,但你需要CGLineCap.butt

这里是更多信息: CGLineCap

换线

 layer.lineCap = CAShapeLayerLineCap.square

至:

 layer.lineCap = CAShapeLayerLineCap.butt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

贝塞尔曲线路径拓宽

路径“ contains_points”使用贝塞尔曲线产生不正确的结果

如何在圆形贝塞尔曲线路径内绘制图像

沿贝塞尔曲线路径放置图像

无法消除贝塞尔曲线路径上的尖峰

用于点检测的宽贝塞尔曲线路径

以曲线形状剪切贝塞尔曲线路径

如何将视图/图层的移动路径约束为贝塞尔曲线路径?

在二次贝塞尔曲线路径上寻找点

如何使用贝塞尔曲线路径剪切UIView?

如何用渐变色填充贝塞尔曲线路径

在两个贝塞尔曲线路径形状之间进行动画处理

不想贝塞尔曲线路径被视框剪切

根据汽车的贝塞尔曲线路径旋转汽车的前轮

快速旋转贝塞尔曲线路径圆中的笔触边缘

对在drawRect()中绘制的贝塞尔曲线路径进行动画处理

使用贝塞尔曲线路径作为剪贴蒙版

从3D立方贝塞尔曲线路径获取一致的法线

在UIView的贝塞尔曲线路径中绘制/绘制类似草图颜色的颜色

贝塞尔曲线路径未根据上下文绘制

使用贝塞尔曲线路径(Swift)创建自定义分段控件

检查闭合的三次方贝塞尔曲线路径是否在椭圆内部

使用closePath函数关闭贝塞尔曲线路径与手动关闭它之间有什么区别?

沿贝塞尔曲线路径的一部分对UIView进行动画处理

贝塞尔曲线闭合路径未充满

贝塞尔曲线数学

如何将多个贝塞尔曲线路径添加到同一个视图 swift 3

使用贝塞尔曲线的正弦曲线的WPF路径描述

将双曲线转换为贝塞尔曲线以绘制轨道路径