ResizeControl.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // ResizeControl.swift
  3. // CropViewController
  4. //
  5. // Created by Guilherme Moura on 2/26/16.
  6. // Copyright © 2016 Reefactor, Inc. All rights reserved.
  7. // Credit https://github.com/sprint84/PhotoCropEditor
  8. import UIKit
  9. protocol ResizeControlDelegate: class {
  10. func resizeControlDidBeginResizing(_ control: ResizeControl)
  11. func resizeControlDidResize(_ control: ResizeControl)
  12. func resizeControlDidEndResizing(_ control: ResizeControl)
  13. }
  14. class ResizeControl: UIView {
  15. weak var delegate: ResizeControlDelegate?
  16. var translation = CGPoint.zero
  17. var enabled = true
  18. fileprivate var startPoint = CGPoint.zero
  19. override init(frame: CGRect) {
  20. super.init(frame: CGRect(x: frame.origin.x, y: frame.origin.y, width: 44.0, height: 44.0))
  21. initialize()
  22. }
  23. required init?(coder aDecoder: NSCoder) {
  24. super.init(frame: CGRect(x: 0, y: 0, width: 44.0, height: 44.0))
  25. initialize()
  26. }
  27. fileprivate func initialize() {
  28. backgroundColor = UIColor.clear
  29. isExclusiveTouch = true
  30. let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(ResizeControl.handlePan(_:)))
  31. addGestureRecognizer(gestureRecognizer)
  32. }
  33. @objc func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
  34. if !enabled {
  35. return
  36. }
  37. switch gestureRecognizer.state {
  38. case .began:
  39. let translation = gestureRecognizer.translation(in: superview)
  40. startPoint = CGPoint(x: round(translation.x), y: round(translation.y))
  41. delegate?.resizeControlDidBeginResizing(self)
  42. case .changed:
  43. let translation = gestureRecognizer.translation(in: superview)
  44. self.translation = CGPoint(x: round(startPoint.x + translation.x), y: round(startPoint.y + translation.y))
  45. delegate?.resizeControlDidResize(self)
  46. case .ended, .cancelled:
  47. delegate?.resizeControlDidEndResizing(self)
  48. default: ()
  49. }
  50. }
  51. }