如何解决Swift:为什么 CAShapeLayer 的 Stroke 和 LineWidth 是从 Center 绘制的
我正在尝试使用具有动态数据的 PieChart
。
在点击每个 Pie
时,它必须突出显示,其余处于正常状态。
动态改变 lineWidth
的 CAShapeLayer
,但 lineWidth
从中间路径增加。
它必须从下往上增加
代码:
let centerPoint = CGPoint (x: circle.bounds.width / 2,y: circle.bounds.width / 2)
let circleRadius : CGFloat = circle.bounds.width / 2 * 0.83
let circlePath = UIBezierPath(arcCenter: centerPoint,radius: circleRadius,startAngle: CGFloat(1.0 * .pi),endAngle: CGFloat(3.0 * .pi),clockwise: true)
let progressCircle = CAShapeLayer()
progressCircle.path = circlePath.cgPath
progressCircle.strokeColor = color.cgColor
progressCircle.fillColor = UIColor.clear.cgColor
if onClick == 2 {
progressCircle.lineWidth = 60
} else {
progressCircle.lineWidth = 30
}
progressCircle.strokeStart = strokeStart/PieChartConstant.maxPercent
progressCircle.lineCap = CAShapeLayerLineCap.butt
progressCircle.strokeEnd = strokeEnd/PieChartConstant.maxPercent
查询:
增加的 Pie
应该和之前的 Pies
一样。请指导我,如何实现这一目标。
参考:
Checked_this ,但无法实现,也不知道如何实现。
我的输出:
解决方法
我已经努力达到了结果。
OnClicking,需要增加这个radius
。然后,得到了确切的结果。
代码:
.........
.....
let centerPoint = CGPoint (x: circle.bounds.width / 2,y: circle.bounds.width / 2)
var circleRadius : CGFloat = circle.bounds.width / 2 * 0.83
if onClick == 2 { //THIS BLOCK IS USED TO INCREASE PARTICULAR PIE
circleRadius = circleRadius + 10
}
let circlePath = UIBezierPath(arcCenter: centerPoint,radius: circleRadius,startAngle: CGFloat(1.0 * .pi),endAngle: CGFloat(3.0 * .pi),clockwise: true)
.......
............
输出
,就我个人而言,我认为绘制整个线段形状并填充它会更快乐,而不是试图让一个简单的笔划代表形状。我毫不费力地得到这种东西:
这里的每一段都被绘制成一条弧线,一条线,一条弧线,一条线,然后填充。这种方法可以完全控制如何绘制线段,因为我们自己绘制线段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。