我正在尝试为音乐播放器构建进度视图。我总体上对编程很新,现在真的走到了死胡同。
我的进展很好。我是animatig" strokeEnd"使用Mediafile的值(值/持续时间),但strokeEnd只能达到圆圈的值。然而,这首歌也完成了,这就是为什么我认为,在某个地方计算错误。
这是我正在使用的一个非常简单的Shaplayer。
var value: CGFloat = 0.0{
didSet {
redrawStrokeEnd() }
}
private func setupShapeLayer(shapeLayer: CAShapeLayer) {
let startAngle = CGFloat(M_PI_2)
let endAngle = CGFloat(M_PI_2 * 2 + M_PI_2)
progressLayer.path = UIBezierPath(arcCenter:centerPoint, radius: CGRectGetWidth(frame)/2 + 5, startAngle:startAngle, endAngle: endAngle, clockwise: true).CGPath
progressLayer.strokeStart = 0.0
progressLayer.strokeEnd = 0.0 }
func redrawStrokeEnd() {
progressLayer.strokeEnd = CGFloat(value / CGFloat(duration))}
value = currentTime和duration = Playbackduration。 我无法弄清楚,为什么笔画不会移动整个圆圈。
答案 0 :(得分:0)
它不是中风你看到半圈的原因。您的路径只有错误的起点和终点角度。您可以将它们设置为如下所示以获得完整的圆圈:
let startAngle = CGFloat(M_PI_2)
let endAngle = CGFloat(5*M_PI_2)
或者更好的是,如果你不想用弧度设置角度,请将它们设置为这样的度数:
let startAngle = CGFloat(0 * M_PI / 180)
let endAngle = CGFloat(360 * M_PI / 180.0)
答案 1 :(得分:0)
只需更改代码中的起始角度和结束角度即可。
let startAngle = -90.0
let endAngle = -90.01
答案 2 :(得分:0)
也许你正在使用错误的常数?正如其他一些评论者指出的那样,弧度中的圆圈横穿2 * pi。然而,常数M_PI_2等于(pi / 2)所以现在你只能从(pi / 2) - >>遍历。 (3pi / 2)...或pi。如果你真的想从pi / 2开始尝试:
let startAngle = CGFloat(M_PI_2)
let endAngle = CGFloat(M_PI_2 + 2.0 * M_PI)