95 lines
3.0 KiB
Swift
95 lines
3.0 KiB
Swift
//
|
||
// Lunch_ProgressView.swift
|
||
// MusicPlayer
|
||
//
|
||
// Created by Mr.Zhou on 2024/3/27.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
class MP_Lunch_ProgressView: UIView {
|
||
struct Constant {
|
||
//进度条宽度
|
||
static let lineWidth: CGFloat = 6*width
|
||
//进度槽颜色
|
||
static let trackColor:UIColor = .init(hex: "#FFFFFF")
|
||
//进度条颜色
|
||
static let progressColors:[CGColor] = [
|
||
UIColor(red: 0.109, green: 0.784, blue: 0.932, alpha: 1).cgColor,
|
||
UIColor(red: 0.412, green: 0.996, blue: 0.451, alpha: 1).cgColor,
|
||
UIColor(red: 0.796, green: 0.839, blue: 0.294, alpha: 1).cgColor
|
||
]
|
||
}
|
||
//渐变层
|
||
private var gradientLayer:CAGradientLayer!
|
||
//进度槽
|
||
private var trackLayer:CAShapeLayer!
|
||
//进度条路径(水平线)
|
||
private var path:UIBezierPath!
|
||
override init(frame: CGRect) {
|
||
super.init(frame: frame)
|
||
setUpLayers()
|
||
}
|
||
|
||
required init?(coder: NSCoder) {
|
||
super.init(coder: coder)
|
||
setUpLayers()
|
||
}
|
||
override func layoutSubviews() {
|
||
super.layoutSubviews()
|
||
}
|
||
override func draw(_ rect: CGRect) {
|
||
//初始化圆角矩形路径
|
||
path = UIBezierPath()
|
||
//获取起点
|
||
let startPoint = CGPoint(x: bounds.minX, y: bounds.maxY)
|
||
//获取终点
|
||
let endPoint = CGPoint(x: bounds.maxX, y: bounds.maxY)
|
||
//路径起始点
|
||
path.move(to: startPoint)
|
||
//增加路线
|
||
path.addLine(to: endPoint)
|
||
//初始化进度槽
|
||
trackLayer = .init()
|
||
//路径宽
|
||
trackLayer.lineWidth = bounds.height
|
||
trackLayer.fillColor = UIColor.clear.cgColor
|
||
//路径颜色
|
||
trackLayer.strokeColor = Constant.trackColor.cgColor
|
||
//设置起始点
|
||
trackLayer.strokeStart = 0
|
||
//设置当前点
|
||
trackLayer.strokeEnd = 0
|
||
//路径端口为圆形
|
||
trackLayer.lineCap = .round
|
||
trackLayer.path = path.cgPath
|
||
layer.addSublayer(trackLayer)
|
||
//初始化渐变色进度条
|
||
gradientLayer = .init()
|
||
//渐变层大小
|
||
gradientLayer.frame = .init(x: 0, y: -2, width: bounds.size.width, height: bounds.size.height+1)
|
||
// gradientLayer.shadowPath = trackLayer.path
|
||
//渐变层颜色
|
||
gradientLayer.colors = Constant.progressColors
|
||
//渐变层起始点
|
||
gradientLayer.startPoint = .init(x: 0, y: 1)
|
||
//渐变层终点
|
||
gradientLayer.endPoint = .init(x: 1, y: 1)
|
||
layer.addSublayer(gradientLayer)
|
||
//渐变层遮罩
|
||
gradientLayer.mask = trackLayer
|
||
}
|
||
//layer添加
|
||
private func setUpLayers() {
|
||
backgroundColor = .init(hex: "#FFFFFF", alpha: 0.15)
|
||
}
|
||
/// 渐变色执行方法
|
||
/// - Parameter progress: 进度值
|
||
func setProgress(_ progress: CGFloat) {
|
||
if progress <= 1 {
|
||
//进度条动画
|
||
trackLayer.strokeEnd = progress
|
||
}
|
||
}
|
||
}
|