Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.40 KB | None | 0 0
  1. //
  2. //  MyDoubleSlider.swift
  3. //  Jour-7-CustomControls
  4. //
  5. //  Created by Ludivine Maret on 22/11/2017.
  6. //  Copyright © 2017 student. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class MyDoubleSlider: UIView {
  12.  
  13.     var valueMin : Float = 0
  14.     var valueMax : Float = 1
  15.    
  16.     override init(frame: CGRect) {
  17.         super.init(frame: frame)
  18.         setupGestures()
  19.     }
  20.    
  21.     required init?(coder aDecoder: NSCoder) {
  22.         super.init(coder: aDecoder)
  23.         setupGestures()
  24.     }
  25.    
  26.     var panRecognizer = UIPanGestureRecognizer()
  27.    
  28.     func setupGestures() {
  29.         panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(panEvent(_:)))
  30.         self.addGestureRecognizer(panRecognizer)
  31.     }
  32.    
  33.     enum InteractionStatus {
  34.         case none
  35.         case panMin
  36.         case panMax
  37.     }
  38.    
  39.     var interactionStatus = InteractionStatus.none
  40.    
  41.     @objc func panEvent(_ recognizer : UIPanGestureRecognizer) {
  42.        
  43.         let r = CGFloat(8) // 8px
  44.         let w = bounds.width
  45.        
  46.         let gmin = CGFloat(0)
  47.         let gmax = w - 2 * r
  48.  
  49.         switch recognizer.state {
  50.             case .began:
  51.                 let panX = recognizer.location(in: self).x
  52.                 let minX = CGFloat(valueMin) * (gmax - gmin) + gmin + r
  53.                 let maxX = CGFloat(valueMax) * (gmax - gmin) + gmin + r
  54.                
  55.                 let distToMin = abs(minX - panX)
  56.                 let distToMax = abs(maxX - panX)
  57.            
  58.                 if distToMin < distToMax {
  59.                     interactionStatus = .panMin
  60.                 } else {
  61.                     interactionStatus = .panMax
  62.                 }
  63.            
  64.             case .changed:
  65.                 let panX = recognizer.location(in: self).x
  66.                
  67.                 //update value
  68.                 var value = (panX - gmin - r) / (gmax-gmin)
  69.                 value = min(1.0, max(0.0, value))
  70.                
  71.                 if interactionStatus == .panMin {
  72.                     valueMin = Float(value)
  73.                 } else {
  74.                     valueMax = Float(value)
  75.                 }
  76.                
  77.                 setNeedsDisplay() // Ne jamais appeler draw(rect:)
  78.            
  79.             case .ended:
  80.                 interactionStatus = .none
  81.             case .possible, .cancelled, .failed:
  82.                 interactionStatus = .none
  83.                 // do nothing
  84.                 break;
  85.         }
  86.         print(recognizer)
  87.     }
  88.    
  89.     // Only override draw() if you perform custom drawing.
  90.     // An empty implementation adversely affects performance during animation.
  91.     override func draw(_ rect: CGRect) {
  92.         // Drawing code
  93.        
  94.         let r = CGFloat(8) // 8px
  95.         let w = bounds.width
  96.         let h = bounds.height
  97.        
  98.         let gmin = CGFloat(0)
  99.         let gmax = w - 2 * r
  100.        
  101.         let pmin = CGFloat(valueMin) * (gmax - gmin) + gmin
  102.         let pmax = CGFloat(valueMax) * (gmax - gmin) + gmin
  103.        
  104.         // Trait de fond
  105.         UIColor.blue.set()
  106.         UIRectFill(CGRect(x: r, y: h/2, width: w - 2 * r, height: 2))
  107.        
  108.         // Puce 1
  109.         UIColor.red.set()
  110.         UIRectFill(CGRect(x: pmin, y: h/2-r, width: 2 * r, height: 2 * r))
  111.        
  112.         // Puce 2
  113.         UIColor.green.set()
  114.         UIRectFill(CGRect(x: pmax, y: h/2-r, width: 2 * r, height: 2 * r))
  115.     }
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement