85 lines
2.8 KiB
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
|
|
}
|
|
}
|
|
}
|