Music_Player3/MusicPlayer/MP/Common/Base(公用基类)/Views/MP_Lunch_ProgressView.swift
2024-05-11 09:48:37 +08:00

95 lines
3.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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