【发布时间】:2018-09-25 17:22:37
【问题描述】:
我正在尝试在我的应用程序中创建一个圆角矩形进度指示器。我之前实现了一个圆形指示器,但不喜欢这种形状。我希望它看起来像这样(起点在顶部):
但我将0 作为图层的.strokeStart 属性:
我当前的代码在viewDidLoad():
let queueShapeLayer = CAShapeLayer()
let queuePath = UIBezierPath(roundedRect: addToQueue.frame, cornerRadius: addToQueue.layer.cornerRadius)
queueShapeLayer.path = queuePath.cgPath
queueShapeLayer.lineWidth = 5
queueShapeLayer.strokeColor = UIColor.white.cgColor
queueShapeLayer.fillColor = UIColor.clear.cgColor
queueShapeLayer.strokeStart = 0
queueShapeLayer.strokeEnd = 0.5
view.layer.addSublayer(queueShapeLayer)
addToQueue 是显示“Upvote”的按钮。
与创建圆形进度指示器不同,我无法在 Bezier 路径的初始化中设置开始和结束角度。
如何让进度从第一张图片中的顶部开始?
编辑 - 添加一张没有圆角半径的图片:
似乎是圆角半径造成了问题。
如果您有任何问题,请提出!
【问题讨论】:
-
我建议不要在
viewDidLoad中进行所有设置,而是创建自定义UIView子类。另外,如果您能提供minimal reproducible example -
@Cristik 如果我创建一个自定义的
UIView子类会有什么帮助,但我看不到任何好处?另外,我相信我的问题是最小的、完整的和可验证的。你能详细说明为什么不是吗? -
对于初学者,问题中的代码无法编译。我们应该能够把代码扔到操场上。这会让人们更容易帮助你。
-
@Cristik 好的,我刚刚从程序的其他地方添加了第一行。谢谢
-
您在寻找动画吗?您的两个屏幕截图(以及您的问题中的其他内容)表明了这一点。我当然不是 CoreAnimation 方面的专家(这就是 CALayers 的意义所在),但
viewDidLoad似乎是完全错误的地方。也许从一个更基本的例子开始?说一个矩形形状(不是cornerRadius)并让它工作?我认为如果您使用draw(rect:)和一个简单的矩形,那么让弯曲的边框工作将是一件简单的事情。
标签: swift formula cashapelayer