Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 4.91 KB | None | 0 0
  1. //
  2. //  ViewControllerSimulador.swift
  3. //  SimuladorResorte
  4. //
  5. //  Created by Angel Figueroa Rivera on 10/10/19.
  6. //  Copyright © 2019 Itesm. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class ViewControllerSimulador: UIViewController {
  12.     @IBOutlet weak var btnPause: UIButton!
  13.     @IBOutlet weak var btnPlay: UIButton!
  14.     @IBOutlet weak var btnStop: UIButton!
  15.     @IBOutlet weak var btnReset: UIButton!
  16.     @IBOutlet weak var btnValues: UIButton!
  17.     @IBOutlet weak var lbTime: UILabel!
  18.     @IBOutlet weak var imgMass: UIImageView!
  19.    
  20.     var btnSelected : UIButton!
  21.     var mass : Int = 500
  22.     var constantK : Int = 16
  23.     var timer : Timer!
  24.     var counter : Int = 0
  25.     var timeSpeed : Float = 0.01
  26.     var elapsedTime : Float = 0.0
  27.    
  28.     var xi : Float = 80.0 // Punto inicial
  29.     var o : Float = 0.0 // Pi si esta compactado, 0 si esta estirado
  30.     var startingXCoord : CGFloat!
  31.  
  32.    
  33.     override func viewDidLoad() {
  34.         super.viewDidLoad()
  35.         btnSelected = btnPause
  36.         btnValues.layer.cornerRadius = 4
  37.         btnPause.layer.cornerRadius = 4
  38.         btnPlay.layer.cornerRadius = 4
  39.         btnStop.layer.cornerRadius = 4
  40.         btnReset.layer.cornerRadius = 4
  41.        
  42.         startingXCoord = imgMass.frame.origin.x
  43.         xi = Float(imgMass.frame.size.width)
  44.     }
  45.    
  46.     @IBAction func onPause(_ sender: UIButton) {
  47.         if timer != nil {
  48.             onBtnTap(sender)
  49.             timer.invalidate()
  50.             timer = nil
  51.         }
  52.     }
  53.    
  54.     @IBAction func onPlay(_ sender: UIButton) {
  55.         onBtnTap(sender)
  56.         if timer == nil {
  57.             timer = Timer.scheduledTimer(timeInterval: TimeInterval(timeSpeed), target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
  58.         }
  59.     }
  60.    
  61.     @objc func onTimerFires() {
  62.         let min = Int(counter / 6000)
  63.         let sec = Int(counter / 100 % 60)
  64.         let mil = counter % 100
  65.         var minStr = "\(min)"
  66.         var secStr = "\(sec)"
  67.         var milStr = "\(mil)"
  68.        
  69.         if min < 10 {
  70.             minStr = "0\(min)"
  71.         }
  72.        
  73.         if sec < 10 {
  74.             secStr = "0\(sec)"
  75.         }
  76.        
  77.         if mil < 10 {
  78.             milStr = "0\(mil)"
  79.         }
  80.        
  81.         lbTime.text = "\(minStr):\(secStr):\(milStr)"
  82.         counter += 1
  83.         updatePosicion()
  84.     }
  85.    
  86.     @IBAction func onStop(_ sender: UIButton) {
  87.         if timer != nil {
  88.             onBtnTap(sender)
  89.             timer.invalidate()
  90.             timer = nil
  91.             counter = 0
  92.         }
  93.     }
  94.    
  95.     @IBAction func onReset(_ sender: UIButton) {
  96.         onBtnTap(sender)
  97.         counter = 0
  98.         if timer != nil {
  99.             timer.invalidate()
  100.             timer = nil
  101.         }
  102.        
  103.         lbTime.text = "00:00:00"
  104.         mass = 500
  105.         constantK = 16
  106.         resetPos()
  107.         print(mass)
  108.         print(constantK)
  109.     }
  110.    
  111.     func onBtnTap(_ sender: UIButton) {
  112.         resetBtn(btnSelected)
  113.        
  114.         sender.backgroundColor = UIColor.init(red: 1, green: 59/255, blue: 66/255, alpha: 1)
  115.         sender.tintColor = UIColor.init(red: 1, green: 1, blue: 1, alpha: 1)
  116.         btnSelected = sender
  117.         }
  118.    
  119.     func resetBtn(_ sender : UIButton) {
  120.         sender.backgroundColor = UIColor.init(red: 233/255, green: 233/255, blue: 233/255, alpha: 1)
  121.         sender.tintColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 1)
  122.     }
  123.    
  124.     func updatePosicion() {
  125.         elapsedTime += 1 / timeSpeed
  126.         let posActual = getPosActual(xi: xi, k: Float(constantK), m: Float(mass)/1000, o: o, t: elapsedTime)
  127.         let movement = Float(startingXCoord) + posActual
  128.         let newRect = CGRect(origin: CGPoint(x: CGFloat(movement), y: CGFloat(imgMass.frame.origin.y)), size: imgMass.frame.size)
  129.        
  130.         imgMass.frame = newRect
  131.     }
  132.    
  133.     func resetPos() {
  134.         elapsedTime = 0.0
  135.        
  136.         let movement = Float(startingXCoord)
  137.         let newRect = CGRect(origin: CGPoint(x: CGFloat(movement), y: CGFloat(imgMass.frame.origin.y)), size: imgMass.frame.size)
  138.        
  139.         imgMass.frame = newRect
  140.     }
  141.    
  142.     func getPosActual( xi: Float, k: Float, m: Float, o: Float, t: Float) -> Float{
  143.         return abs(xi) * cos(sqrt(k/m) * t + o)
  144.     }
  145.    
  146.     @IBAction func switchChange(_ sender: UISwitch) {
  147.         if sender.isOn {
  148.             timeSpeed = 0.1
  149.         } else {
  150.             timeSpeed = 0.01
  151.         }
  152.     }
  153.     // MARK: - Navigation
  154.  
  155.     // In a storyboard-based application, you will often want to do a little preparation before navigation
  156.     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  157.         let viewValues = segue.destination as! ViewControllerValues
  158.         viewValues.mass = mass
  159.         viewValues.constantK = constantK
  160.     }
  161.    
  162.     //UNWIND
  163.     @IBAction func unwindSetValues(unwindSegue: UIStoryboardSegue) {
  164.        
  165.     }
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement