2017-09-24 38 views
0

我是初学iOS开发人员,经常看到人们使用Heart Beat or Waves作为进度条(即歌曲进度)的设计模式。有时这些progress bars go around the专辑艺术等如何使swove挥动进度条?

我该如何实现这样的事情?我知道UISlider加上AVAudioPlayer,但找不到任何东西来实现,例如歌曲滑块。

enter image description here

回答

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

并请自行更加完善,比如:在处理事件时,将默认并强调颜色等

+0

谢谢非常。 – rulebreaker4

+0

@ rulebreaker4,欢迎您。 –