Molecule ProgressBar
This commit is contained in:
parent
350385a499
commit
78f035ce08
@ -10,53 +10,34 @@ import Foundation
|
|||||||
|
|
||||||
public class ProgressBar: UIProgressView {
|
public class ProgressBar: UIProgressView {
|
||||||
|
|
||||||
public func styleprogessbar(json: Dictionary<String,Any>) {
|
public func styleprogessbar(json: [AnyHashable: Any]?) {
|
||||||
let percentage = Float(json["percent"] as! String)
|
|
||||||
let barstyle = json["barStyle"] as! Bool
|
var barstyle = Bool()
|
||||||
let progresscolor = json["progressColor"] as! String
|
var progresscolor = String()
|
||||||
let backgroundcolor = json["backgroundColor"] as! String
|
var backgroundcolor = String()
|
||||||
let thickness = Float(json["thickness"] as! String)
|
|
||||||
|
let thickness = json?.floatFromStringForKey("thickness")
|
||||||
|
let percentage = json?.floatFromStringForKey("percent")
|
||||||
|
|
||||||
|
if let backgroundcolorUnwrapped = json?.optionalStringForKey("backgroundColor") {
|
||||||
|
backgroundcolor = backgroundcolorUnwrapped
|
||||||
|
}
|
||||||
|
if let progresscolorUnwrapped = json?.optionalStringForKey("progressColor") {
|
||||||
|
progresscolor = progresscolorUnwrapped
|
||||||
|
}
|
||||||
|
if let barStyleUnwrapped = json?["barStyle"] as? Bool {
|
||||||
|
barstyle = barStyleUnwrapped
|
||||||
|
}
|
||||||
|
progressTintColor = UIColor.mfGet(forHex: progresscolor)
|
||||||
|
trackTintColor = UIColor.mfGet(forHex: backgroundcolor)
|
||||||
|
progress = (percentage ?? Float(PaddingThree))/100
|
||||||
|
|
||||||
self.progressTintColor = UIColor.init(hex: progresscolor)
|
|
||||||
self.trackTintColor = UIColor.init(hex: backgroundcolor)
|
|
||||||
self.progress = percentage!/100
|
|
||||||
self.frame.size.width = 200
|
|
||||||
switch barstyle {
|
switch barstyle {
|
||||||
case true:
|
case true:
|
||||||
self.progressViewStyle = .bar
|
progressViewStyle = .bar
|
||||||
default:
|
default:
|
||||||
self.layer.cornerRadius = CGFloat(thickness!/2)
|
layer.cornerRadius = CGFloat((thickness ?? Float(PaddingTwo))/2)
|
||||||
self.clipsToBounds = true
|
clipsToBounds = true
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
extension UIColor {
|
|
||||||
public convenience init?(hex: String) {
|
|
||||||
let r, g, b, a: CGFloat
|
|
||||||
|
|
||||||
if hex.hasPrefix("#") {
|
|
||||||
let start = hex.index(hex.startIndex, offsetBy: 1)
|
|
||||||
let hexColor = String(hex[start...])
|
|
||||||
|
|
||||||
if hexColor.count == 6 {
|
|
||||||
let scanner = Scanner(string: hexColor)
|
|
||||||
var hexNumber: UInt32 = 0
|
|
||||||
|
|
||||||
if scanner.scanHexInt32(&hexNumber) {
|
|
||||||
r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
|
|
||||||
g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
|
|
||||||
b = CGFloat(hexNumber & 0x0000ff) / 255
|
|
||||||
|
|
||||||
self.init(red: r, green: g, blue: b, alpha: 1.0)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,10 @@ import UIKit
|
|||||||
@objcMembers open class ProgressBarView: ViewConstrainingView {
|
@objcMembers open class ProgressBarView: ViewConstrainingView {
|
||||||
|
|
||||||
var progress = ProgressBar()
|
var progress = ProgressBar()
|
||||||
var descriptionLabel = Label()
|
var topleftlabel = Label()
|
||||||
|
var toprightlabel = Label()
|
||||||
|
var bottomleftlabel = Label()
|
||||||
|
var bottomrightlabel = Label()
|
||||||
var thickness: Float?
|
var thickness: Float?
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
@ -35,44 +38,78 @@ import UIKit
|
|||||||
}
|
}
|
||||||
|
|
||||||
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable: Any]?) {
|
open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable: Any]?) {
|
||||||
|
|
||||||
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
|
progress.styleprogessbar(json: json)
|
||||||
|
let thickness = json?.floatFromStringForKey("thickness")
|
||||||
|
let topleftlabeljson = json?.optionalDictionaryForKey("label")
|
||||||
|
let toprightlabeljson = json?.optionalDictionaryForKey("toprightlabel")
|
||||||
|
let bottomleftlabeljson = json?.optionalDictionaryForKey("bottomleftlabel")
|
||||||
|
let bottomrightlabeljson = json?.optionalDictionaryForKey("bottomrightlabel")
|
||||||
|
|
||||||
if let jsonUnwrapped = json as? Dictionary<String, Any> {
|
topleftlabel.setWithJSON(topleftlabeljson, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
progress.styleprogessbar(json: jsonUnwrapped)
|
toprightlabel.setWithJSON(toprightlabeljson, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
}
|
bottomleftlabel.setWithJSON(bottomleftlabeljson, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
|
bottomrightlabel.setWithJSON(bottomrightlabeljson, delegateObject: delegateObject, additionalData: additionalData)
|
||||||
let textlabeljson = json!["label"] as! Dictionary<String,Any> //UILabel.init(frame: CGRect(x:0, y:0, width: 300, height: 300))
|
progress.heightAnchor.constraint(equalToConstant: CGFloat(thickness ?? Float(PaddingTwo))).isActive = true
|
||||||
self.descriptionLabel.setWithJSON(textlabeljson, delegateObject: delegateObject, additionalData: additionalData)
|
|
||||||
thickness = Float(json!["thickness"] as! String)
|
|
||||||
// thickness = 20.0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override open func setupView() {
|
override open func setupView() {
|
||||||
super.setupView()
|
super.setupView()
|
||||||
translatesAutoresizingMaskIntoConstraints = false
|
addSubview(topleftlabel)
|
||||||
addSubview(descriptionLabel)
|
addSubview(toprightlabel)
|
||||||
|
addSubview(bottomleftlabel)
|
||||||
|
addSubview(bottomrightlabel)
|
||||||
addSubview(progress)
|
addSubview(progress)
|
||||||
|
|
||||||
progress.translatesAutoresizingMaskIntoConstraints = false
|
progress.translatesAutoresizingMaskIntoConstraints = false
|
||||||
descriptionLabel.translatesAutoresizingMaskIntoConstraints = false
|
|
||||||
|
topleftlabel.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
|
||||||
let vericalSpacing = MFStyler.defaultVerticalPaddingForApplicationWidth()
|
topleftlabel.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
|
||||||
|
let topleftconstarint = NSLayoutConstraint(item: topleftlabel, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.5, constant: 0.0)
|
||||||
descriptionLabel.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
|
topleftconstarint.priority = UILayoutPriority(rawValue: 100)
|
||||||
descriptionLabel.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
|
topleftconstarint.isActive = true
|
||||||
descriptionLabel.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
|
topleftlabel.setContentHuggingPriority(UILayoutPriority(801), for: .horizontal)
|
||||||
descriptionLabel.numberOfLines = 0
|
topleftlabel.setContentHuggingPriority(UILayoutPriority(801), for: .vertical)
|
||||||
descriptionLabel.sizeToFit()
|
NSLayoutConstraint(item: toprightlabel, attribute: .leading, relatedBy: .equal, toItem: topleftlabel, attribute: .trailing, multiplier: 1.0, constant: PaddingTwo).isActive = true
|
||||||
|
toprightlabel.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
|
||||||
|
toprightlabel.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
|
||||||
|
toprightlabel.textAlignment = .right
|
||||||
|
let toprightconstraint = NSLayoutConstraint(item: toprightlabel, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.5, constant: 0.0)
|
||||||
|
toprightconstraint.priority = UILayoutPriority(rawValue: 100)
|
||||||
|
toprightconstraint.isActive = true
|
||||||
|
toprightlabel.setContentHuggingPriority(UILayoutPriority(1000), for: .horizontal)
|
||||||
|
toprightlabel.setContentHuggingPriority(UILayoutPriority(802), for: .vertical)
|
||||||
|
|
||||||
|
let progressconstraintone = NSLayoutConstraint(item: progress, attribute: .top, relatedBy: .equal, toItem: topleftlabel, attribute: .bottom, multiplier: 1.0, constant: PaddingTwo)
|
||||||
|
progressconstraintone.priority = UILayoutPriority(rawValue: 700)
|
||||||
|
progressconstraintone.isActive = true
|
||||||
|
let progressconstrainttwo = NSLayoutConstraint(item: progress, attribute: .top, relatedBy: .greaterThanOrEqual, toItem: toprightlabel, attribute: .bottom, multiplier: 1.0, constant: PaddingTwo)
|
||||||
|
progressconstrainttwo.priority = UILayoutPriority(rawValue: 1000)
|
||||||
|
progressconstrainttwo.isActive = true
|
||||||
progress.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
|
progress.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
|
||||||
progress.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
|
progress.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
|
||||||
progress.heightAnchor.constraint(equalToConstant: 20).isActive = true
|
|
||||||
progress.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: vericalSpacing).isActive = true
|
|
||||||
progress.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
|
|
||||||
|
|
||||||
|
|
||||||
|
bottomleftlabel.topAnchor.constraint(equalTo: progress.bottomAnchor, constant: PaddingTwo).isActive = true
|
||||||
|
bottomleftlabel.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
|
||||||
|
let bottomleftconstraint = NSLayoutConstraint(item: bottomleftlabel, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.5, constant: 0.0)
|
||||||
|
bottomleftconstraint.priority = UILayoutPriority(100)
|
||||||
|
bottomleftconstraint.isActive = true
|
||||||
|
bottomleftlabel.setContentHuggingPriority(UILayoutPriority(900), for: .horizontal)
|
||||||
|
bottomleftlabel.setContentHuggingPriority(UILayoutPriority(850), for: .vertical)
|
||||||
|
NSLayoutConstraint(item: bottomrightlabel, attribute: .leading, relatedBy: .equal, toItem: bottomleftlabel, attribute: .trailing, multiplier: 1.0, constant: PaddingTwo).isActive = true
|
||||||
|
bottomrightlabel.topAnchor.constraint(equalTo: progress.bottomAnchor, constant: PaddingTwo).isActive = true
|
||||||
|
bottomrightlabel.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
|
||||||
|
let bottomrightconstraint = NSLayoutConstraint(item: bottomrightlabel, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.5, constant: 0.0)
|
||||||
|
bottomrightconstraint.priority = UILayoutPriority(100)
|
||||||
|
bottomrightconstraint.isActive = true
|
||||||
|
bottomrightlabel.textAlignment = .right
|
||||||
|
bottomrightlabel.setContentHuggingPriority(UILayoutPriority(1000), for: .horizontal)
|
||||||
|
bottomrightlabel.setContentHuggingPriority(UILayoutPriority(851), for: .vertical)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user