X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/53b27422d140022594fc241cca91c3183be57bca..48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff:/iOS/WolneLektury/Controls/ProgressLabel.swift diff --git a/iOS/WolneLektury/Controls/ProgressLabel.swift b/iOS/WolneLektury/Controls/ProgressLabel.swift new file mode 100644 index 0000000..735d6ce --- /dev/null +++ b/iOS/WolneLektury/Controls/ProgressLabel.swift @@ -0,0 +1,87 @@ +// +// ProgressLabel.swift +// WolneLektury +// +// Created by Pawel Dabrowski on 20/09/2018. +// Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved. +// + +import UIKit + +// from https://stackoverflow.com/a/46047570/871425 +class ProgressLabel: UIView { + + private var privateColor = UIColor.green + @IBInspectable var color: UIColor { + get { + return privateColor + }set { + privateColor = newValue + } + } + + var textColor = UIColor.white + var font = UIFont.systemFont(ofSize: 15) + var fullProgress: Bool = false + var customText: String? { + didSet{ + if customText != nil{ + setNeedsDisplay() + } + } + } + var progress: Float = 0 { + didSet { + customText = nil + progress = Float.minimum(100.0, Float.maximum(progress, 0.0)) + self.setNeedsDisplay() + } + } + + override func draw(_ rect: CGRect) { + let context = UIGraphicsGetCurrentContext()! + + // Set up environment. + let size = self.bounds.size + + layer.borderColor = privateColor.cgColor + layer.borderWidth = 1.0 + layer.cornerRadius = 10 + clipsToBounds = true + + var prg = progress + var progressMessage = NSString(format:"Pobieranie %d%%", Int(prg)) + + if let customText = customText{ + prg = fullProgress ? 100 : 0 + progressMessage = customText as NSString + } + + // Prepare progress as a string. + var attributes: [NSAttributedStringKey:Any] = [ NSAttributedStringKey.font : font ] + let textSize = progressMessage.size(withAttributes: attributes) + let progressX = ceil(CGFloat(prg) / 100 * size.width) + let textPoint = CGPoint(x: ceil((size.width - textSize.width) / 2.0), y: ceil((size.height - textSize.height) / 2.0)) + + // Draw background + foreground text + privateColor.setFill() + context.fill(self.bounds) + attributes[NSAttributedStringKey.foregroundColor] = textColor + let rct = CGRect(x: 20, y: 12, width: bounds.size.width - 20, height: bounds.size.height - 13) + progressMessage.draw(in: rct, withAttributes: attributes) + + // Clip the drawing that follows to the remaining progress' frame. + context.saveGState() + let remainingProgressRect = CGRect(x: progressX, y: 0.0, width: size.width - progressX, height: size.height) + context.addRect(remainingProgressRect) + context.clip() + + // Draw again with inverted colors. + textColor.setFill() + context.fill(self.bounds) + attributes[NSAttributedStringKey.foregroundColor] = privateColor + progressMessage.draw(in: rct, withAttributes: attributes) + + context.restoreGState() + } +}