From d7da7b615dc42b57f86c3574f1f7623e1f9dd5f5 Mon Sep 17 00:00:00 2001 From: Lucas Fernandez Nicolau Date: Mon, 27 May 2019 17:46:52 -0300 Subject: [PATCH 1/4] Bronze e Prata finalizados --- .../Controller/BronzeViewController.swift | 30 ++++++++++ .../Controller/LoggedInViewController.swift | 30 ++++++++++ .../Controller/PrataViewController.swift | 30 ++++++++++ UIAnimation/Controller/ViewController.swift | 58 +++++++++++++++++++ UIAnimation/ViewController.swift | 20 ------- 5 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 UIAnimation/Controller/BronzeViewController.swift create mode 100644 UIAnimation/Controller/LoggedInViewController.swift create mode 100644 UIAnimation/Controller/PrataViewController.swift create mode 100644 UIAnimation/Controller/ViewController.swift delete mode 100644 UIAnimation/ViewController.swift diff --git a/UIAnimation/Controller/BronzeViewController.swift b/UIAnimation/Controller/BronzeViewController.swift new file mode 100644 index 0000000..e103284 --- /dev/null +++ b/UIAnimation/Controller/BronzeViewController.swift @@ -0,0 +1,30 @@ +// +// BronzeViewController.swift +// UIAnimation +// +// Created by Lucas Fernandez Nicolau on 27/05/19. +// Copyright © 2019 Pedro Cacique. All rights reserved. +// + +import UIKit + +class BronzeViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/UIAnimation/Controller/LoggedInViewController.swift b/UIAnimation/Controller/LoggedInViewController.swift new file mode 100644 index 0000000..b418c0f --- /dev/null +++ b/UIAnimation/Controller/LoggedInViewController.swift @@ -0,0 +1,30 @@ +// +// LoggedInViewController.swift +// UIAnimation +// +// Created by Lucas Fernandez Nicolau on 27/05/19. +// Copyright © 2019 Pedro Cacique. All rights reserved. +// + +import UIKit + +class LoggedInViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/UIAnimation/Controller/PrataViewController.swift b/UIAnimation/Controller/PrataViewController.swift new file mode 100644 index 0000000..d81121f --- /dev/null +++ b/UIAnimation/Controller/PrataViewController.swift @@ -0,0 +1,30 @@ +// +// PrataViewController.swift +// UIAnimation +// +// Created by Lucas Fernandez Nicolau on 27/05/19. +// Copyright © 2019 Pedro Cacique. All rights reserved. +// + +import UIKit + +class PrataViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/UIAnimation/Controller/ViewController.swift b/UIAnimation/Controller/ViewController.swift new file mode 100644 index 0000000..e09cb20 --- /dev/null +++ b/UIAnimation/Controller/ViewController.swift @@ -0,0 +1,58 @@ +// +// ViewController.swift +// UIAnimation_base +// +// Created by Pedro Cacique on 27/05/19. +// Copyright © 2019 Pedro Cacique. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + @IBOutlet weak var rocket: UIImageView! + @IBOutlet weak var world: UIImageView! + + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + override func viewDidLoad() { + super.viewDidLoad() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + // bounds - conteúdo dentro do frame + // frame - escala e posicionamento + // center - movimentação na tela + + self.rocket.center.x = self.view.center.x + self.rocket.frame.size.height = self.view.frame.size.height * 0.30 + + self.world.frame.size.width = self.view.frame.size.width + self.world.center.x = self.view.center.x + self.world.center.y = self.view.frame.height + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + UIView.animate(withDuration: 5.0, delay: 0, options: [.curveEaseOut], animations: { + self.rocket.center.y = self.world.center.y - self.world.frame.height / 2 + }, completion: { finished in + self.rocket.image = #imageLiteral(resourceName: "rocket2") + }) + +// let circlePath = UIBezierPath(arcCenter: self.world.center, radius: self.world.frame.width, startAngle: 0, endAngle: .pi * 2, clockwise: true) +// +// let animation = CAKeyframeAnimation(keyPath: #keyPath(CALayer.position)) +// +// animation.duration = 3.5 +// animation.repeatCount = MAXFLOAT +// animation.path = circlePath.cgPath +// +// self.rocket.layer.add(animation, forKey: nil) + } +} + diff --git a/UIAnimation/ViewController.swift b/UIAnimation/ViewController.swift deleted file mode 100644 index 9804cbb..0000000 --- a/UIAnimation/ViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// ViewController.swift -// UIAnimation_base -// -// Created by Pedro Cacique on 27/05/19. -// Copyright © 2019 Pedro Cacique. All rights reserved. -// - -import UIKit - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - - } - - -} - From e859b2bbfbe0d73a93a46abeb77a66037edcba69 Mon Sep 17 00:00:00 2001 From: Lucas Fernandez Nicolau Date: Mon, 27 May 2019 17:48:51 -0300 Subject: [PATCH 2/4] Arquivos adicionados ao versionamento e desafios bronze e prata finalizados --- UIAnimation.xcodeproj/project.pbxproj | 22 ++- .../UserInterfaceState.xcuserstate | Bin 0 -> 27149 bytes .../xcschemes/xcschememanagement.plist | 14 ++ UIAnimation/Base.lproj/Main.storyboard | 148 +++++++++++++++++- .../Controller/BronzeViewController.swift | 88 +++++++++-- .../Controller/LoggedInViewController.swift | 18 +-- .../Controller/PrataViewController.swift | 90 +++++++++-- 7 files changed, 337 insertions(+), 43 deletions(-) create mode 100644 UIAnimation.xcodeproj/project.xcworkspace/xcuserdata/nicolau.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 UIAnimation.xcodeproj/xcuserdata/nicolau.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/UIAnimation.xcodeproj/project.pbxproj b/UIAnimation.xcodeproj/project.pbxproj index aebf720..cf5926e 100644 --- a/UIAnimation.xcodeproj/project.pbxproj +++ b/UIAnimation.xcodeproj/project.pbxproj @@ -12,6 +12,9 @@ 778CE9D7229BF77300F5483E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 778CE9D5229BF77300F5483E /* Main.storyboard */; }; 778CE9D9229BF77600F5483E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 778CE9D8229BF77600F5483E /* Assets.xcassets */; }; 778CE9DC229BF77600F5483E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 778CE9DA229BF77600F5483E /* LaunchScreen.storyboard */; }; + B66C1EF8229C72CE00B3B0DF /* PrataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */; }; + B66C1EFA229C7D3B00B3B0DF /* LoggedInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */; }; + B6DB5A67229C59AD00AFA4B2 /* BronzeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -22,6 +25,9 @@ 778CE9D8229BF77600F5483E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 778CE9DB229BF77600F5483E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 778CE9DD229BF77600F5483E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrataViewController.swift; sourceTree = ""; }; + B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInViewController.swift; sourceTree = ""; }; + B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BronzeViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,8 +60,8 @@ 778CE9D0229BF77300F5483E /* UIAnimation */ = { isa = PBXGroup; children = ( + B6DB5A68229C59BC00AFA4B2 /* Controller */, 778CE9D1229BF77300F5483E /* AppDelegate.swift */, - 778CE9D3229BF77300F5483E /* ViewController.swift */, 778CE9D5229BF77300F5483E /* Main.storyboard */, 778CE9D8229BF77600F5483E /* Assets.xcassets */, 778CE9DA229BF77600F5483E /* LaunchScreen.storyboard */, @@ -64,6 +70,17 @@ path = UIAnimation; sourceTree = ""; }; + B6DB5A68229C59BC00AFA4B2 /* Controller */ = { + isa = PBXGroup; + children = ( + 778CE9D3229BF77300F5483E /* ViewController.swift */, + B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */, + B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */, + B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */, + ); + path = Controller; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -135,8 +152,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B6DB5A67229C59AD00AFA4B2 /* BronzeViewController.swift in Sources */, + B66C1EFA229C7D3B00B3B0DF /* LoggedInViewController.swift in Sources */, 778CE9D4229BF77300F5483E /* ViewController.swift in Sources */, 778CE9D2229BF77300F5483E /* AppDelegate.swift in Sources */, + B66C1EF8229C72CE00B3B0DF /* PrataViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/UIAnimation.xcodeproj/project.xcworkspace/xcuserdata/nicolau.xcuserdatad/UserInterfaceState.xcuserstate b/UIAnimation.xcodeproj/project.xcworkspace/xcuserdata/nicolau.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..755d180e229f40ade22b6a1b2d77ffb5c9788e0a GIT binary patch literal 27149 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 + + + + SchemeUserState + + UIAnimation.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/UIAnimation/Base.lproj/Main.storyboard b/UIAnimation/Base.lproj/Main.storyboard index c20059c..d91a5ab 100644 --- a/UIAnimation/Base.lproj/Main.storyboard +++ b/UIAnimation/Base.lproj/Main.storyboard @@ -13,34 +13,161 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +188,7 @@ - + @@ -71,7 +198,7 @@ - + @@ -79,6 +206,10 @@ + + + + @@ -122,6 +253,7 @@ + diff --git a/UIAnimation/Controller/BronzeViewController.swift b/UIAnimation/Controller/BronzeViewController.swift index e103284..93f34c1 100644 --- a/UIAnimation/Controller/BronzeViewController.swift +++ b/UIAnimation/Controller/BronzeViewController.swift @@ -8,23 +8,87 @@ import UIKit +func delay(_ seconds: Double, completion: @escaping ()->Void) { + DispatchQueue.main.asyncAfter(deadline: .now() + seconds, execute: completion) +} + class BronzeViewController: UIViewController { + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + @IBOutlet weak var rocket: UIImageView! + @IBOutlet weak var world: UIImageView! + + let backgroundColors = [#colorLiteral(red: 0.2039215686, green: 0.2862745098, blue: 0.368627451, alpha: 1), #colorLiteral(red: 0.5333333333, green: 0.7529411765, blue: 0.968627451, alpha: 1)] + override func viewDidLoad() { super.viewDidLoad() - - // Do any additional setup after loading the view. } - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.world.frame.size.width = self.view.frame.size.width + self.world.center.x = self.view.center.x + self.world.center.y = self.view.frame.height + + self.rocket.center.x = self.view.center.x + self.rocket.center.y = self.world.center.y - self.world.frame.height / 2 + self.rocket.frame.size.height = self.view.frame.size.height * 0.30 + self.rocket.layer.zPosition = 1000 + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + UIView.animate(withDuration: 5.0, delay: 0, options: [.curveLinear], animations: { + self.rocket.image = #imageLiteral(resourceName: "rocket") + self.rocket.center.y = -self.rocket.frame.height + }) + + delay(1.5) { + self.createSegmentedAnimation(from: CGPoint(x: self.view.center.x, y: self.view.center.y), to: CGPoint(x: self.view.center.x, y: -100), withDuration: 5.0) + } + + delay(2.0) { + self.createSegmentedAnimation(from: CGPoint(x: self.view.center.x - 40, y: self.view.center.y), to: CGPoint(x: self.view.center.x - 40, y: -100), withDuration: 3.0) + + self.createSegmentedAnimation(from: CGPoint(x: self.view.center.x + 40, y: self.view.center.y), to: CGPoint(x: self.view.center.x + 40, y: -100), withDuration: 3.0) + } + } + + @IBAction func segmentedChanged(_ sender: UISegmentedControl) { + self.view.backgroundColor = backgroundColors[sender.selectedSegmentIndex] + } + + func createSegmentedAnimation(from start: CGPoint, to end: CGPoint, withDuration duration: TimeInterval) { + let myPath = UIBezierPath() + myPath.move(to: start) + myPath.addLine(to: end) + + let myShapeLayer = CAShapeLayer() + myShapeLayer.strokeColor = #colorLiteral(red: 0.9999960065, green: 1, blue: 1, alpha: 1) + myShapeLayer.lineWidth = 2 + myShapeLayer.path = myPath.cgPath + myShapeLayer.strokeStart = 0.8 + + // Animacão para desenhar a linha + let myEndAnimation = CABasicAnimation(keyPath: "strokeEnd") + myEndAnimation.fromValue = 0.2 + myEndAnimation.toValue = 1.0 + + // Animação para apagar a linha + let myStartAnimation = CABasicAnimation(keyPath: "strokeStart") + myStartAnimation.fromValue = 0.0 + myStartAnimation.toValue = 0.8 + + let animationGroup = CAAnimationGroup() + animationGroup.animations = [myStartAnimation, myEndAnimation] + animationGroup.duration = duration + + myShapeLayer.add(animationGroup, forKey: "drawLine") + self.view.layer.addSublayer(myShapeLayer) } - */ - } diff --git a/UIAnimation/Controller/LoggedInViewController.swift b/UIAnimation/Controller/LoggedInViewController.swift index b418c0f..0200e88 100644 --- a/UIAnimation/Controller/LoggedInViewController.swift +++ b/UIAnimation/Controller/LoggedInViewController.swift @@ -10,21 +10,15 @@ import UIKit class LoggedInViewController: UIViewController { + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + override func viewDidLoad() { super.viewDidLoad() - - // Do any additional setup after loading the view. } - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + @IBAction func dismissVC(_ sender: UIButton) { + self.dismiss(animated: true, completion: nil) } - */ - } diff --git a/UIAnimation/Controller/PrataViewController.swift b/UIAnimation/Controller/PrataViewController.swift index d81121f..233c049 100644 --- a/UIAnimation/Controller/PrataViewController.swift +++ b/UIAnimation/Controller/PrataViewController.swift @@ -10,21 +10,91 @@ import UIKit class PrataViewController: UIViewController { + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + @IBOutlet var loginButton: UIButton! + @IBOutlet var heading: UILabel! + @IBOutlet var username: UITextField! + @IBOutlet var password: UITextField! + @IBOutlet weak var rocket: UIImageView! + @IBOutlet weak var world: UIImageView! + override func viewDidLoad() { super.viewDidLoad() - - // Do any additional setup after loading the view. + + loginButton.layer.cornerRadius = 8.0 + loginButton.layer.masksToBounds = true } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + heading.center.x = -view.bounds.width + username.center.x = -view.bounds.width + password.center.x = -view.bounds.width + loginButton.center.x = -view.bounds.width + + self.world.frame.size.width = self.view.frame.size.width + self.world.center.x = self.view.center.x + self.world.center.y = self.view.frame.height + + self.rocket.center.x = self.view.center.x + self.rocket.center.y = -self.rocket.frame.height + self.rocket.frame.size.height = self.view.frame.size.height * 0.30 + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + UIView.animate(withDuration: 2.35, delay: 0, options: [.curveEaseOut], animations: { + self.rocket.center.y = self.world.center.y - self.world.frame.height / 2 + }, completion: { finished in + self.rocket.image = #imageLiteral(resourceName: "rocket2") + + UIView.animate(withDuration: 0.5, delay: 0.0, options: [.curveEaseInOut], animations: { + self.heading.center.x = self.view.center.x + }, completion: nil) - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + UIView.animate(withDuration: 0.5, delay: 0.3, options: [.curveEaseInOut], animations: { + self.username.center.x = self.view.center.x + }, completion: nil) + + UIView.animate(withDuration: 0.5, delay: 0.4, options: [.curveEaseInOut], animations: { + self.password.center.x = self.view.center.x + }, completion: nil) + + UIView.animate(withDuration: 0.5, delay: 0.5, options: [.curveEaseInOut], animations: { + self.loginButton.center.x = self.view.center.x + }, completion: nil) + }) } - */ + @IBAction func login() { + UIView.animate(withDuration: 0.5, delay: 0.0, options: [.curveEaseInOut], animations: { + self.heading.center.x += self.view.bounds.width + }, completion: nil) + + UIView.animate(withDuration: 0.5, delay: 0.3, options: [.curveEaseInOut], animations: { + self.username.center.x += self.view.bounds.width + }, completion: nil) + + UIView.animate(withDuration: 0.5, delay: 0.4, options: [.curveEaseInOut], animations: { + self.password.center.x += self.view.bounds.width + }, completion: nil) + + UIView.animate(withDuration: 0.5, delay: 0.5, options: [.curveEaseInOut], animations: { + self.loginButton.center.x += self.view.bounds.width + }, completion: { completed in + + UIView.animate(withDuration: 2.35, delay: 0, options: [.curveEaseOut], animations: { + self.rocket.image = #imageLiteral(resourceName: "rocket") + self.rocket.center.y = -self.rocket.frame.height / 2 + }, completion: { completed in + self.performSegue(withIdentifier: "loggedIn", sender: self) + }) + + }) + } } From 9afe967341c94ca3e963ca3e68cc45ce42c28a42 Mon Sep 17 00:00:00 2001 From: Lucas Fernandez Nicolau Date: Tue, 28 May 2019 09:41:08 -0300 Subject: [PATCH 3/4] Desafio ouro finalizado --- UIAnimation.xcodeproj/project.pbxproj | 20 ++- .../UserInterfaceState.xcuserstate | Bin 27149 -> 29924 bytes UIAnimation/Base.lproj/Main.storyboard | 39 ++++-- .../Controller/OuroViewController.swift | 128 ++++++++++++++++++ .../Controller/PrataViewController.swift | 14 +- UIAnimation/View/CustomCard.swift | 63 +++++++++ 6 files changed, 246 insertions(+), 18 deletions(-) create mode 100644 UIAnimation/Controller/OuroViewController.swift create mode 100644 UIAnimation/View/CustomCard.swift diff --git a/UIAnimation.xcodeproj/project.pbxproj b/UIAnimation.xcodeproj/project.pbxproj index cf5926e..63d02ad 100644 --- a/UIAnimation.xcodeproj/project.pbxproj +++ b/UIAnimation.xcodeproj/project.pbxproj @@ -14,6 +14,8 @@ 778CE9DC229BF77600F5483E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 778CE9DA229BF77600F5483E /* LaunchScreen.storyboard */; }; B66C1EF8229C72CE00B3B0DF /* PrataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */; }; B66C1EFA229C7D3B00B3B0DF /* LoggedInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */; }; + B66C1EFC229C860700B3B0DF /* OuroViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EFB229C860700B3B0DF /* OuroViewController.swift */; }; + B66C1EFF229C97DE00B3B0DF /* CustomCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66C1EFE229C97DE00B3B0DF /* CustomCard.swift */; }; B6DB5A67229C59AD00AFA4B2 /* BronzeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */; }; /* End PBXBuildFile section */ @@ -27,6 +29,8 @@ 778CE9DD229BF77600F5483E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrataViewController.swift; sourceTree = ""; }; B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInViewController.swift; sourceTree = ""; }; + B66C1EFB229C860700B3B0DF /* OuroViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OuroViewController.swift; sourceTree = ""; }; + B66C1EFE229C97DE00B3B0DF /* CustomCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCard.swift; sourceTree = ""; }; B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BronzeViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -60,6 +64,7 @@ 778CE9D0229BF77300F5483E /* UIAnimation */ = { isa = PBXGroup; children = ( + B66C1EFD229C978C00B3B0DF /* View */, B6DB5A68229C59BC00AFA4B2 /* Controller */, 778CE9D1229BF77300F5483E /* AppDelegate.swift */, 778CE9D5229BF77300F5483E /* Main.storyboard */, @@ -70,6 +75,14 @@ path = UIAnimation; sourceTree = ""; }; + B66C1EFD229C978C00B3B0DF /* View */ = { + isa = PBXGroup; + children = ( + B66C1EFE229C97DE00B3B0DF /* CustomCard.swift */, + ); + path = View; + sourceTree = ""; + }; B6DB5A68229C59BC00AFA4B2 /* Controller */ = { isa = PBXGroup; children = ( @@ -77,6 +90,7 @@ B6DB5A66229C59AD00AFA4B2 /* BronzeViewController.swift */, B66C1EF7229C72CE00B3B0DF /* PrataViewController.swift */, B66C1EF9229C7D3B00B3B0DF /* LoggedInViewController.swift */, + B66C1EFB229C860700B3B0DF /* OuroViewController.swift */, ); path = Controller; sourceTree = ""; @@ -157,6 +171,8 @@ 778CE9D4229BF77300F5483E /* ViewController.swift in Sources */, 778CE9D2229BF77300F5483E /* AppDelegate.swift in Sources */, B66C1EF8229C72CE00B3B0DF /* PrataViewController.swift in Sources */, + B66C1EFC229C860700B3B0DF /* OuroViewController.swift in Sources */, + B66C1EFF229C97DE00B3B0DF /* CustomCard.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -303,7 +319,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = PV6ZXMXKDK; + DEVELOPMENT_TEAM = 87G2Y58K9U; INFOPLIST_FILE = "$(SRCROOT)/UIAnimation/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -321,7 +337,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = PV6ZXMXKDK; + DEVELOPMENT_TEAM = 87G2Y58K9U; INFOPLIST_FILE = "$(SRCROOT)/UIAnimation/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/UIAnimation.xcodeproj/project.xcworkspace/xcuserdata/nicolau.xcuserdatad/UserInterfaceState.xcuserstate b/UIAnimation.xcodeproj/project.xcworkspace/xcuserdata/nicolau.xcuserdatad/UserInterfaceState.xcuserstate index 755d180e229f40ade22b6a1b2d77ffb5c9788e0a..eb78b8889184f7b6f8ab15f3db80b53fe8cef061 100644 GIT binary patch delta 13889 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
khHn;cAj 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 diff --git a/UIAnimation/Base.lproj/Main.storyboard b/UIAnimation/Base.lproj/Main.storyboard index d91a5ab..73578bf 100644 --- a/UIAnimation/Base.lproj/Main.storyboard +++ b/UIAnimation/Base.lproj/Main.storyboard @@ -1,10 +1,6 @@ - - - - @@ -15,7 +11,7 @@ - + @@ -27,7 +23,7 @@ - + @@ -63,7 +59,7 @@ - + @@ -131,11 +127,11 @@ - + iU??GKAdWyW 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 + + + + @@ -11,7 +15,7 @@ - + @@ -23,7 +27,7 @@ - + @@ -59,7 +63,7 @@ - + @@ -127,11 +131,11 @@ - +