如何在swift中制作waved进度条?

时间:2017-09-24 07:41:58

标签: ios iphone swift3 xcode8

我是初学者IOS开发者,经常在设计模式中看到人们使用Heart Beat or Waves作为进度条(即歌曲进度)。有时这些progress bars go around the专辑艺术等

我怎样才能实现这样的目标?我知道UISliderAVAudioPlayer结合但无法找到任何可以实现的内容,例如关注歌曲滑块。

enter image description here

1 个答案:

答案 0 :(得分:3)

您可以制作自定义视图,并手动绘制垂直线条。主要参考程序:

import UIKit

class WavedProgressView: UIView {

    var lineMargin:CGFloat = 2.0
    var volumes:[CGFloat] = [0.5,0.3,0.2,0.6,0.4,0.5,0.8,0.6,0.4]

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.darkGray
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.backgroundColor = UIColor.darkGray
    }

    override var frame: CGRect {
        didSet{
            self.drawVerticalLines()
        }
    }

    var lineWidth:CGFloat = 3.0{
        didSet{
            self.drawVerticalLines()
        }
    }

    func drawVerticalLines() {
        let linePath = CGMutablePath()
        for i in 0..<self.volumes.count {
            let height = self.frame.height * volumes[i]
            let y = (self.frame.height - height) / 2.0
            linePath.addRect(CGRect(x: lineMargin + (lineMargin + lineWidth) * CGFloat(i), y: y, width: lineWidth, height: height))
        }

        let lineLayer = CAShapeLayer()
        lineLayer.path = linePath
        lineLayer.lineWidth = 0.5
        lineLayer.strokeColor = UIColor.white.cgColor
        lineLayer.fillColor = UIColor.white.cgColor
        self.layer.sublayers?.removeAll()
        self.layer.addSublayer(lineLayer)
    }
}

效果是:
enter image description here

请自己做得更完美,比如:处理事件,应用默认和突出显示的颜色等。