From 53c4bd6c466529fd8191089924d499ebcaeece32 Mon Sep 17 00:00:00 2001 From: Xi Zhang Date: Fri, 12 Jul 2024 16:12:54 -0400 Subject: [PATCH] Revise codes following MR comments --- .../Atoms/Views/CircularProgressBar.swift | 41 ++++------- .../Views/CircularProgressBarModel.swift | 68 +++++++++++-------- 2 files changed, 52 insertions(+), 57 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBar.swift b/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBar.swift index 651b7f65..bc9083d0 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBar.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBar.swift @@ -23,17 +23,8 @@ import UIKit private var tracklayer = CAShapeLayer() private var labelLayer = CATextLayer() - var setProgressColor: UIColor = UIColor.red { - didSet { - progressLayer.strokeColor = setProgressColor.cgColor - } - } - - var setTrackColor: UIColor = UIColor.lightGray { - didSet { - tracklayer.strokeColor = setTrackColor.cgColor - } - } + var progressColor: UIColor = UIColor.red + var trackColor: UIColor = UIColor.lightGray // A path with which CAShapeLayer will be drawn on the screen private var viewCGPath: CGPath? { @@ -61,37 +52,29 @@ import UIKit guard let model = model as? CircularProgressBarModel else { return } // set background color - if let backgroundColor = model.backgroundColor { - self.backgroundColor = backgroundColor.uiColor - } else { - self.backgroundColor = UIColor.clear - } + backgroundColor = model.backgroundColor?.uiColor ?? UIColor.clear configureProgressViewToBeCircular() // set progress color - if let color = model.color { - setProgressColor = color.uiColor - } else { - setProgressColor = UIColor.red - } - + progressColor = model.color?.uiColor ?? .red + progressLayer.strokeColor = progressColor.cgColor + // set track color - if let trackColor = model.trackColor { - setTrackColor = trackColor.uiColor - } else { - setProgressColor = UIColor.lightGray - } + trackColor = model.trackColor?.uiColor ?? .lightGray + tracklayer.strokeColor = trackColor.cgColor // show circular progress view with animation. showProgressWithAnimation(duration: graphModel?.duration ?? 1.0, value: Float(graphModel?.percent ?? 0) / 100) // show progress percentage label. - showProgressPercentage() + if let drawText = model.drawText, drawText { + showProgressPercentage() + } } private func configureProgressViewToBeCircular() { - let lineWidth = graphModel?.lineWidth ?? 5.0 + let lineWidth = graphModel?.lineWidth ?? 4.0 self.drawShape(using: tracklayer, lineWidth: lineWidth) self.drawShape(using: progressLayer, lineWidth: lineWidth) diff --git a/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBarModel.swift b/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBarModel.swift index 252f4893..7e2f4cbd 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBarModel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CircularProgressBarModel.swift @@ -2,29 +2,31 @@ // CircularProgressBarModel.swift // MVMCoreUI // +// https://oneconfluence.verizon.com/display/MFD/Circular+Progress+Tracker +// // Created by Xi Zhang on 7/5/24. // Copyright © 2024 Verizon Wireless. All rights reserved. // import Foundation - public class CircularProgressBarModel: MoleculeModelProtocol { public static var identifier: String = "circularProgress" public var id: String = UUID().uuidString - public var size: GraphSize = .small { + public var percent: Int = 0 + public var size: GraphSize? = .small { didSet { updateSize() } } - public var diameter: CGFloat = 84 - public var lineWidth: CGFloat = 5 - public var duration : Double = 1.0 - public var color: Color? - public var trackColor: Color? - public var percent: Int? + public var diameter: CGFloat? = 84 + public var lineWidth: CGFloat? = 4 + public var duration : Double? = 1.0 + public var color: Color? = Color(uiColor: UIColor.mfGet(forHex: "#007AB8")) + public var trackColor: Color? = Color(uiColor: .mvmCoolGray3) + public var drawText: Bool? = true public var backgroundColor: Color? = Color(uiColor: UIColor.clear) public init() { @@ -33,21 +35,24 @@ public class CircularProgressBarModel: MoleculeModelProtocol { private enum CodingKeys: String, CodingKey { case id + case moleculeName + case percent case size case diameter case lineWidth case duration case color case trackColor - case percent + case drawText case backgroundColor - case moleculeName } required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) id = try typeContainer.decodeIfPresent(String.self, forKey: .id) ?? UUID().uuidString + percent = try typeContainer.decode(Int.self, forKey: .percent) + if let size = try typeContainer.decodeIfPresent(GraphSize.self, forKey: .size) { self.size = size } @@ -65,46 +70,53 @@ public class CircularProgressBarModel: MoleculeModelProtocol { self.duration = duration } - color = try typeContainer.decodeIfPresent(Color.self, forKey: .color) - trackColor = try typeContainer.decodeIfPresent(Color.self, forKey: .trackColor) - percent = try typeContainer.decodeIfPresent(Int.self, forKey: .percent) + if let drawText = try typeContainer.decodeIfPresent(Bool.self, forKey: .drawText) { + self.drawText = drawText + } - backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) + if let color = try typeContainer.decodeIfPresent(Color.self, forKey: .color) { + self.color = color + } + + if let trackColor = try typeContainer.decodeIfPresent(Color.self, forKey: .trackColor) { + self.trackColor = trackColor + } + + if let backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) { + self.backgroundColor = backgroundColor + } } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(id, forKey: .id) try container.encode(moleculeName, forKey: .moleculeName) - try container.encode(size, forKey: .size) - try container.encode(diameter, forKey: .diameter) - try container.encode(lineWidth, forKey: .lineWidth) - try container.encode(duration, forKey: .duration) + try container.encode(percent, forKey: .percent) + try container.encodeIfPresent(size, forKey: .size) + try container.encodeIfPresent(diameter, forKey: .diameter) + try container.encodeIfPresent(lineWidth, forKey: .lineWidth) + try container.encodeIfPresent(duration, forKey: .duration) + try container.encodeIfPresent(drawText, forKey: .drawText) try container.encodeIfPresent(trackColor, forKey: .trackColor) try container.encodeIfPresent(color, forKey: .color) - try container.encodeIfPresent(percent, forKey: .percent) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) } - func getCGColorsFromArray(_ colorArray: [String]) -> [Color] { - return colorArray.map { (colorString) -> Color in - return Color(uiColor: UIColor.mfGet(forHex: colorString)) - } - } - func updateSize() { switch size { case .small: diameter = MFSizeObject(standardSize: 64)?.getValueBasedOnApplicationWidth() ?? 64 - lineWidth = MFSizeObject(standardSize: 5)?.getValueBasedOnApplicationWidth() ?? 5 + lineWidth = MFSizeObject(standardSize: 4)?.getValueBasedOnApplicationWidth() ?? 4 break case .medium: diameter = MFSizeObject(standardSize: 84)?.getValueBasedOnApplicationWidth() ?? 84 - lineWidth = MFSizeObject(standardSize: 5)?.getValueBasedOnApplicationWidth() ?? 5 + lineWidth = MFSizeObject(standardSize: 4)?.getValueBasedOnApplicationWidth() ?? 4 break case .large: diameter = MFSizeObject(standardSize: 124)?.getValueBasedOnApplicationWidth() ?? 124 - lineWidth = MFSizeObject(standardSize: 5)?.getValueBasedOnApplicationWidth() ?? 5 + lineWidth = MFSizeObject(standardSize: 4)?.getValueBasedOnApplicationWidth() ?? 4 + break + case .none: break } }