StrokeEnd 没有画完整的圆

StrokeEnd not drawing full circle

我正在尝试为音乐播放器构建进度视图。总的来说,我对编程完全陌生,现在真的走到了死胡同。

我的进度很好。我使用 Mediafile 的值 (value/duration) 动画 "strokeEnd",但 strokeEnd 仅到达圆的 have。不过后来这首歌也完成了,所以我觉得是哪里计算错了。

我用的是一个非常简单的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。 我想不通,为什么 stroke End 没有移动整圈。

你看到半圆的原因不是 strokeEnd。您只是路径的起点和终点角度错误。您可以将它们设置成一个完整的圆圈:

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)

只需更改代码中的起始角度和结束角度即可。

let startAngle = -90.0
let endAngle = -90.01

也许您使用了错误的常量?正如其他一些评论者指出的那样,以弧度为单位的圆穿过 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)