From 93aa69c27a9d4cf27ab7c24770398aa26f324e4c Mon Sep 17 00:00:00 2001 From: Paula Leite Date: Tue, 28 May 2019 17:54:39 -0300 Subject: [PATCH 1/2] Exercicios Bronze e Prata feitos --- .../UserInterfaceState.xcuserstate | Bin 0 -> 25851 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/xcschememanagement.plist | 14 ++ CustomView/Base.lproj/Main.storyboard | 232 +++++++++++++++++- .../ProgressBarViewController.swift | 21 +- .../ProgressCircleViewController.swift | 89 ++++++- CustomView/Views/ProgressBarView.swift | 22 +- CustomView/Views/ProgressCircleView.swift | 62 ++++- 8 files changed, 423 insertions(+), 22 deletions(-) create mode 100644 CustomView.xcodeproj/project.xcworkspace/xcuserdata/paulaleite.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/CustomView.xcodeproj/project.xcworkspace/xcuserdata/paulaleite.xcuserdatad/UserInterfaceState.xcuserstate b/CustomView.xcodeproj/project.xcworkspace/xcuserdata/paulaleite.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..bed1ca2e9349ec79b7fefce6b3f19c1455595b3f GIT binary patch literal 25851 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 SUWeI}5r5%eyvM&`kN+P|={c_e literal 0 HcmV?d00001 diff --git a/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcschemes/xcschememanagement.plist b/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2a99e1a --- /dev/null +++ b/CustomView.xcodeproj/xcuserdata/paulaleite.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + CustomView.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/CustomView/Base.lproj/Main.storyboard b/CustomView/Base.lproj/Main.storyboard index 4b8cb5b..f6c1abd 100644 --- a/CustomView/Base.lproj/Main.storyboard +++ b/CustomView/Base.lproj/Main.storyboard @@ -77,12 +77,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -132,7 +188,7 @@ - + @@ -197,6 +253,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -205,15 +359,17 @@ - + + + - + @@ -385,6 +541,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -401,7 +625,7 @@ - + diff --git a/CustomView/Controllers/ProgressBarViewController.swift b/CustomView/Controllers/ProgressBarViewController.swift index 7c56694..9d0ee58 100644 --- a/CustomView/Controllers/ProgressBarViewController.swift +++ b/CustomView/Controllers/ProgressBarViewController.swift @@ -40,5 +40,24 @@ class ProgressBarViewController: UITableViewController { @IBAction func targetChange(_ sender: Any) { self.progressBarView?.targetValue = CGFloat(self.targetSlider.value) } + + @IBAction func colorButtonPressed(_ sender: UIButton) { + let color = UIColor.random + sender.backgroundColor = color + + switch sender.tag { + case 0: + progressBarView?.lineColor = color + self.widthSlider.tintColor = color + case 1: + progressBarView?.progressColor = color + self.progressSlider.tintColor = color + case 2: + progressBarView?.targetColor = color + self.targetSlider.tintColor = color + default: + break + } + + } } - diff --git a/CustomView/Controllers/ProgressCircleViewController.swift b/CustomView/Controllers/ProgressCircleViewController.swift index 266ef60..64558f3 100644 --- a/CustomView/Controllers/ProgressCircleViewController.swift +++ b/CustomView/Controllers/ProgressCircleViewController.swift @@ -10,35 +10,108 @@ import UIKit class ProgressCircleViewController: UITableViewController { - @IBOutlet weak var progressCircleView: ProgressCircleView? + @IBOutlet weak var biggestProgressCircleView: ProgressCircleView? @IBOutlet weak var widthSlider: UISlider! @IBOutlet weak var progressSlider: UISlider! @IBOutlet weak var targetSlider: UISlider! + @IBOutlet weak var mediumProgressCircleView: ProgressCircleView! + @IBOutlet weak var smallerProgressCircleView: ProgressCircleView! + + + override func viewDidLoad() { super.viewDidLoad() - self.progressCircleView?.circleWidth = CGFloat(self.widthSlider.value) - self.progressCircleView?.progressValue = CGFloat(self.progressSlider.value) - self.progressCircleView?.targetValue = CGFloat(self.targetSlider.value) + self.biggestProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.biggestProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.biggestProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + + self.mediumProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.mediumProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.mediumProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + + self.smallerProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.smallerProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.smallerProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + } override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) - self.progressCircleView?.setNeedsDisplay() + self.biggestProgressCircleView?.setNeedsDisplay() + self.mediumProgressCircleView?.setNeedsDisplay() + self.smallerProgressCircleView?.setNeedsDisplay() } @IBAction func widthChange(_ sender: Any) { - self.progressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.biggestProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.mediumProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) + self.smallerProgressCircleView?.circleWidth = CGFloat(self.widthSlider.value) } @IBAction func progessChange(_ sender: Any) { - self.progressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.biggestProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.mediumProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) + self.smallerProgressCircleView?.progressValue = CGFloat(self.progressSlider.value) } @IBAction func targetChange(_ sender: Any) { - self.progressCircleView?.targetValue = CGFloat(self.targetSlider.value) + self.biggestProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + self.mediumProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + self.smallerProgressCircleView?.targetValue = CGFloat(self.targetSlider.value) + } + + @IBAction func colorButtonPressed(_ sender: UIButton) { + let color = UIColor.random + sender.backgroundColor = color + + switch sender.tag { + case 0: + biggestProgressCircleView?.circleColor = color + mediumProgressCircleView?.circleColor = color + smallerProgressCircleView?.circleColor = color + self.widthSlider.tintColor = color + case 1: + biggestProgressCircleView?.progressColor = color + mediumProgressCircleView?.circleColor = color + smallerProgressCircleView?.circleColor = color + self.progressSlider.tintColor = color + case 2: + biggestProgressCircleView?.targetColor = color + mediumProgressCircleView?.circleColor = color + smallerProgressCircleView?.circleColor = color + self.targetSlider.tintColor = color + default: + break + } + + } + + @IBAction func typeOfChallengeChanged(_ sender: UISegmentedControl) { + + switch sender.selectedSegmentIndex { + case 0: + biggestProgressCircleView?.hideLabel() + mediumProgressCircleView.hideLabel() + smallerProgressCircleView.hideLabel() + biggestProgressCircleView?.isHidden = false + mediumProgressCircleView.isHidden = false + smallerProgressCircleView.isHidden = false + default: + biggestProgressCircleView?.showLabel() + mediumProgressCircleView.showLabel() + smallerProgressCircleView.showLabel() + mediumProgressCircleView.isHidden = true + smallerProgressCircleView.isHidden = true + + } } } +extension UIColor { + static var random: UIColor { + return UIColor(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1), alpha: 1.0) + } +} diff --git a/CustomView/Views/ProgressBarView.swift b/CustomView/Views/ProgressBarView.swift index bfe9f6a..45e90c6 100644 --- a/CustomView/Views/ProgressBarView.swift +++ b/CustomView/Views/ProgressBarView.swift @@ -32,16 +32,30 @@ class ProgressBarView: UIView { } @IBInspectable - var lineColor:UIColor = UIColor.black + var lineColor:UIColor = UIColor.black { + didSet { + setNeedsDisplay() + } + } + @IBInspectable - var targetColor:UIColor = UIColor.blue + var targetColor:UIColor = UIColor.blue { + didSet { + setNeedsDisplay() + } + } + @IBInspectable - var progressColor:UIColor = UIColor.yellow + var progressColor:UIColor = UIColor.yellow { + didSet { + setNeedsDisplay() + } + } override func draw(_ rect: CGRect) { - //Important constants for circle + //Important constants for line let start:CGPoint = CGPoint(x: rect.minX + lineWidth, y: rect.midY) let end:CGPoint = CGPoint(x: rect.maxX - lineWidth, y: rect.midY) diff --git a/CustomView/Views/ProgressCircleView.swift b/CustomView/Views/ProgressCircleView.swift index 9eb1956..e43013c 100644 --- a/CustomView/Views/ProgressCircleView.swift +++ b/CustomView/Views/ProgressCircleView.swift @@ -11,22 +11,26 @@ import UIKit +// Consigo ver o meu desenho na storyboard enquanto uso @IBDesignable class ProgressCircleView: UIView { + // Aparecem os atributos no inspector @IBInspectable // The value of current progress between 0.0 and 1.0 var progressValue:CGFloat = 0.0 { - didSet{ + didSet { setNeedsDisplay() + progressLabel?.text = String(format: "Progress: %.2f%%", progressValue * 100) } } @IBInspectable // TargetValue is a value between 0.0 and 1.0 that represent the value to be archieved var targetValue:CGFloat = 0.75 { - didSet{ + didSet { setNeedsDisplay() + targetLabel?.text = String(format: "Target: %.2f%%", targetValue * 100) } } @@ -38,13 +42,49 @@ class ProgressCircleView: UIView { } @IBInspectable - var circleColor:UIColor = UIColor.black + var circleColor:UIColor = UIColor.black { + didSet { + setNeedsDisplay() + } + } @IBInspectable - var progressColor:UIColor = UIColor.yellow + var progressColor:UIColor = UIColor.yellow { + didSet { + setNeedsDisplay() + } + } @IBInspectable - var targetColor:UIColor = UIColor.green + var targetColor:UIColor = UIColor.green { + didSet { + setNeedsDisplay() + } + } + + var targetLabel: UILabel! + var progressLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + + targetLabel = UILabel() + targetLabel.font = UIFont(name: "Helvetica Neue", size: 12) + targetLabel.frame.size = CGSize(width: 110, height: 80) + targetLabel.textAlignment = .center + targetLabel.center = CGPoint(x: self.center.x, y: self.center.y - 20) + targetLabel.isHidden = true + + progressLabel = UILabel() + progressLabel.font = UIFont(name: "Helvetica Neue", size: 12) + progressLabel.frame.size = CGSize(width: 110, height: 80) + progressLabel.textAlignment = .center + progressLabel.center = CGPoint(x: self.center.x, y: self.center.y) + progressLabel.isHidden = true + + self.addSubview(targetLabel) + self.addSubview(progressLabel) + } // Method that draw the circle, progress and target override func draw(_ rect: CGRect) { @@ -67,6 +107,7 @@ class ProgressCircleView: UIView { // Sets the radius by the smallest side of the view var radius:CGFloat = 0.0 + // O raio vai ser o menor entre a altura e o if rect.width < rect.height{ radius = (rect.width - circleWidth) / 2.0 }else{ @@ -94,5 +135,16 @@ class ProgressCircleView: UIView { context?.setStrokeColor(progressColor.cgColor) context?.addArc(center: centerPoint, radius: radius, startAngle: start, endAngle: progressEnd, clockwise: false) context?.strokePath() + + } + + func hideLabel() { + targetLabel.isHidden = true + progressLabel.isHidden = true + } + + func showLabel() { + targetLabel.isHidden = false + progressLabel.isHidden = false } } From 169df1b2480f28af28fded0b705ab0ecf42b5666 Mon Sep 17 00:00:00 2001 From: Paula Leite Date: Tue, 28 May 2019 17:57:36 -0300 Subject: [PATCH 2/2] Correcao do Prata --- .../UserInterfaceState.xcuserstate | Bin 25851 -> 25851 bytes .../ProgressCircleViewController.swift | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView.xcodeproj/project.xcworkspace/xcuserdata/paulaleite.xcuserdatad/UserInterfaceState.xcuserstate b/CustomView.xcodeproj/project.xcworkspace/xcuserdata/paulaleite.xcuserdatad/UserInterfaceState.xcuserstate index bed1ca2e9349ec79b7fefce6b3f19c1455595b3f..ab4da0ae1dcd1f549e4e6c0889ab9045fdd7a671 100644 GIT binary patch delta 39 xcmV+?0NDTg$pQPx0kBIL0XCCN7+nF)v#J