【发布时间】:2018-12-27 23:52:31
【问题描述】:
我画了一个简单的圆形进度视图,如下所示:
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 应该让它绕到一半,对吗?这就是我得到的:
我测试了多个值,结果发现0.78 绕了一圈。在此之上的任何东西,一直到1,都不会改变任何东西。谁能告诉我我在这里缺少什么。也许我的圆形路径的开始或结束角度有问题?或者也许我完全误解了strokeEnd 的工作原理,在这种情况下,我们将非常感谢您的解释。
【问题讨论】:
标签: swift uibezierpath cashapelayer