Ios 斯威夫特:为什么使用现金支付;s从中心绘制的笔划和线宽
我正在尝试使用具有动态数据的Ios 斯威夫特:为什么使用现金支付;s从中心绘制的笔划和线宽,ios,swift,uiview,pie-chart,cashapelayer,Ios,Swift,Uiview,Pie Chart,Cashapelayer,我正在尝试使用具有动态数据的PieChart 单击每个饼图,它必须高亮显示,其余部分处于正常状态 动态更改CAShapeLayer的lineWidth,但lineWidth从中间路径开始增加 它必须从下到上增加 代码: let centerPoint = CGPoint (x: circle.bounds.width / 2, y: circle.bounds.width / 2) let circleRadius : CGFloat = circle.bounds.width
PieChart
单击每个饼图
,它必须高亮显示,其余部分处于正常状态
动态更改CAShapeLayer
的lineWidth
,但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
.........
.....
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)
.......
............
查询:
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
.........
.....
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)
.......
............
增加的Pie
应与之前的Pie
在同一轨道上。请指导我,如何做到这一点
参考:
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
.........
.....
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)
.......
............
,但无法实现,也不知道如何实现
我的输出:
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
.........
.....
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)
.......
............
我已经试着达到这个结果 单击后,需要增加此
半径
。然后,得到了准确的结果
代码:
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
.........
.....
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)
.......
............
输出
我个人认为,绘制整个分段形状并填充它,而不是试图让一个笔划代表形状,你会更高兴。我毫不费力地得到了这种东西:
这里的每一段都画成一条弧,一条线,一条弧,一条线,然后填充。这种方法可以完全控制分段的绘制方式,因为我们是自己绘制分段的。问题是什么?嗨@matt,增加的饼图应该和以前的饼图一样在同一条轨道上。,如何做到这一点?我不知道你所说的“同一轨道”是什么意思。你能展示一张你希望它们看起来像什么的图片吗?@Sweeper Image updated.,突出显示的饼图应该和“REQUIRED”Image一样位于同一路径中。看起来,REQUIRED Image中的所有线宽都是相同的。首先,为什么要有条件地将
线宽设置为不同的值?您应该将所有线宽设置为相同的数字。这仍然不是解决问题的可行或可维护的方法。您的图形与原始目标图形(中右侧的图形)不相似,也不会相似。与其破坏设计以匹配您的代码,不如升级您的代码以实现设计。我的真实设计不能发布在这里,这是机密。我只是想知道为什么笔划是从中间画出来的,有没有办法把馅饼移到同一个轨道上。我前面提到的设计[你在前面的评论中提到过],代表“同一轨道”的含义。而且,我不想去图书馆。我在试着自己。所以我在这里问了一个问题。但我不知道为什么要投否决票。谢谢@matt,这段简单的代码将帮助很多追随者实现这种简单的饼图。是的@matt。我画了一个完整的圆圈,然后我试图调整笔划的开始和结束。这种做法是错误的。我们必须画出精确的弧线,然后根据需要填充或使用笔划。我已经搜索了很多,完成了我的要求。谢谢你的评论。“如果目标是一个饼状图,画一个饼状图,然后填充它”——在这句话的帮助下,我已经完成了。