gpt4 book ai didi

swift - CAShapeLayer 的描边停在错误的点?

转载 作者:可可西里 更新时间:2023-11-01 00:55:09 25 4
gpt4 key购买 nike

我画了一个简单的圆形进度 View 是这样的:

let trackLayer:CAShapeLayer = CAShapeLayer()
let circularPath:UIBezierPath = UIBezierPath(arcCenter: CGPoint(x: progressView.frame.width / 2, y: 39.5), radius: progressView.layer.frame.size.height * 0.4, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.lightGray.cgColor
trackLayer.lineWidth = 6
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineCap = kCALineCapRound
progressView.layer.insertSublayer(trackLayer, at: 0)
let progressLayer:CAShapeLayer = CAShapeLayer()
progressLayer.path = circularPath.cgPath
progressLayer.strokeColor = UIColor.blue.cgColor
progressLayer.lineWidth = 6
progressLayer.fillColor = UIColor.clear.cgColor
progressLayer.lineCap = kCALineCapSquare
progressLayer.strokeEnd = 0
progressView.layer.insertSublayer(progressLayer, above: trackLayer)

在某个事件中,我尝试更新 progressLayer:

if let sublayers = progressView.layer.sublayers {
(sublayers[1] as! CAShapeLayer).strokeEnd = 0.5
}

现在如果我对strokeEnd的理解是正确的,0是循环路径的起点,1是终点,意思是0.5 应该让它走一半,对吗?这是我得到的:

Stroke of progress layer

我测试了多个值,结果发现 0.78 是一个完整的圆。高于此值,一直到 1,都不会改变任何内容。谁能告诉我我在这里缺少什么。也许我的圆形路径的开始或结束角度有问题?或者我可能完全误解了 strokeEnd 的工作原理,在这种情况下,我们将不胜感激。

最佳答案

Can anyone tell me what I'm missing here. Perhaps a problem with the start or end angle of my circular path?

没错。考虑指定为形状层路径的路径 (circularPath)。它从 startAngle: -CGFloat.pi/2endAngle: 2 * CGFloat.pi。这不仅仅是一个完整的圆。你有看到?这是一个四分之一圆!

这就是为什么在 0.78(实际上是 0.8 或五分之四)上,strokeEnd 值的变化似乎没有任何变化;您只是在绘制圆的起点,重新绘制您已经绘制的圆的一部分。

你可能是说

startAngle: -.pi / 2.0, endAngle: 3 * .pi / 2.0

(尽管会做的是从0.pi*2并应用旋转变换以开始绘图在顶部)。


您的代码的另一个问题可能会导致后续问题,即您忘记为任一层提供框架。因此它们没有大小。

关于swift - CAShapeLayer 的描边停在错误的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51429479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com