Music_Player3/MusicPlayer/MP/Common/Tool(工具封装)/MP_CircularProgressView.swift

85 lines
2.8 KiB
Swift

//
// MP_CircularProgressView.swift
// MusicPlayer
//
// Created by 16 on 2024/5/14.
//
import Foundation
import UIKit
class CircularProgressView: UIView {
private var progressLayer = CAShapeLayer()
private var trackLayer = CAShapeLayer()
public var progress: CGFloat = 0 {
didSet {
progressLayer.strokeEnd = progress
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupView()
}
// private func setupLayers() {
// // Track layer (background circle)
// let center = CGPoint(x: bounds.width / 2, y: bounds.height / 2)
// let circularPath = UIBezierPath(arcCenter: center, radius: bounds.width / 2, startAngle: -CGFloat.pi / 2, endAngle: 3 * CGFloat.pi / 2, clockwise: true)
//
// trackLayer.path = circularPath.cgPath
// trackLayer.strokeColor = UIColor.lightGray.cgColor
// trackLayer.lineWidth = 3
// trackLayer.fillColor = UIColor.clear.cgColor
// layer.addSublayer(trackLayer)
//
// // Progress layer (foreground circle)
// progressLayer.path = circularPath.cgPath
// progressLayer.strokeColor = UIColor.green.cgColor
// progressLayer.lineWidth = 3
// progressLayer.fillColor = UIColor.clear.cgColor
// progressLayer.lineCap = .round
// progressLayer.strokeEnd = 0
// layer.addSublayer(progressLayer)
// }
//
// func setProgress(to progress: CGFloat) {
// self.progress = progress
// }
private func setupView() {
//
trackLayer.path = createCircularPath().cgPath
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.strokeColor = UIColor.lightGray.cgColor
trackLayer.lineWidth = 3
trackLayer.strokeEnd = 1.0
layer.addSublayer(trackLayer)
//
progressLayer.path = createCircularPath().cgPath
progressLayer.fillColor = UIColor.clear.cgColor
progressLayer.strokeColor = UIColor.green.cgColor
progressLayer.lineWidth = 3
progressLayer.strokeEnd = 0.0
layer.addSublayer(progressLayer)
}
private func createCircularPath() -> UIBezierPath {
return UIBezierPath(arcCenter: center, radius: bounds.size.width / 2, startAngle: -.pi / 2, endAngle: .pi * 3 / 2, clockwise: true)
}
func setProgress(to progress: CGFloat) {
self.progress = progress
print("Updating progress to: \(progress)")
DispatchQueue.main.async {
self.progressLayer.strokeEnd = progress
}
}
}