【问题标题】:How to make waved progress bar in swift?如何快速制作挥动的进度条?
【发布时间】:2018-03-05 09:27:40
【问题描述】:

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

我怎样才能做到这一点?我知道UISliderAVAudioPlayer 结合使用,但找不到任何可以实现的目标,例如跟随歌曲滑块。

【问题讨论】:

    标签: ios iphone swift3 xcode8


    【解决方案1】:

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

    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)
        }
    }
    

    效果是:

    请自行完善,例如:处理事件、应用默认颜色和高亮颜色等。

    【讨论】:

    • @YunCHEN 关于如何创建动画进度效果有什么建议吗?我尝试子类化 CAShapeLayer 并覆盖 draw(in:) 来为上下文提供两条路径:一条用于标准条,一条用于进度条,但它们的颜色相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2017-08-20
    • 2011-11-15
    相关资源
    最近更新 更多