PhotoEditorViewController.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // ViewController.swift
  3. // Photo Editor
  4. //
  5. // Created by Mohamed Hamed on 4/23/17.
  6. // Copyright © 2017 Mohamed Hamed. All rights reserved.
  7. //
  8. import UIKit
  9. public final class PhotoEditorViewController: UIViewController {
  10. /** holding the 2 imageViews original image and drawing & stickers */
  11. @IBOutlet weak var canvasView: UIView!
  12. //To hold the image
  13. @IBOutlet var imageView: UIImageView!
  14. @IBOutlet weak var imageViewHeightConstraint: NSLayoutConstraint!
  15. //To hold the drawings and stickers
  16. @IBOutlet weak var canvasImageView: UIImageView!
  17. @IBOutlet weak var topToolbar: UIView!
  18. @IBOutlet weak var bottomToolbar: UIView!
  19. @IBOutlet weak var topGradient: UIView!
  20. @IBOutlet weak var bottomGradient: UIView!
  21. @IBOutlet weak var doneButton: UIButton!
  22. @IBOutlet weak var deleteView: UIView!
  23. @IBOutlet weak var colorsCollectionView: UICollectionView!
  24. @IBOutlet weak var colorPickerView: UIView!
  25. @IBOutlet weak var colorPickerViewBottomConstraint: NSLayoutConstraint!
  26. //Controls
  27. @IBOutlet weak var cropButton: UIButton!
  28. @IBOutlet weak var stickerButton: UIButton!
  29. @IBOutlet weak var drawButton: UIButton!
  30. @IBOutlet weak var textButton: UIButton!
  31. @IBOutlet weak var saveButton: UIButton!
  32. @IBOutlet weak var shareButton: UIButton!
  33. @IBOutlet weak var clearButton: UIButton!
  34. public var image: UIImage?
  35. /**
  36. Array of Stickers -UIImage- that the user will choose from
  37. */
  38. public var stickers : [UIImage] = []
  39. /**
  40. Array of Colors that will show while drawing or typing
  41. */
  42. public var colors : [UIColor] = []
  43. public var photoEditorDelegate: PhotoEditorDelegate?
  44. var colorsCollectionViewDelegate: ColorsCollectionViewDelegate!
  45. // list of controls to be hidden
  46. public var hiddenControls : [control] = []
  47. var stickersVCIsVisible = false
  48. var drawColor: UIColor = UIColor.black
  49. var textColor: UIColor = UIColor.white
  50. var isDrawing: Bool = false
  51. var lastPoint: CGPoint!
  52. var swiped = false
  53. var lastPanPoint: CGPoint?
  54. var lastTextViewTransform: CGAffineTransform?
  55. var lastTextViewTransCenter: CGPoint?
  56. var lastTextViewFont:UIFont?
  57. var activeTextView: UITextView?
  58. var imageViewToPan: UIImageView?
  59. var isTyping: Bool = false
  60. var stickersViewController: StickersViewController!
  61. //Register Custom font before we load XIB
  62. public override func loadView() {
  63. registerFont()
  64. super.loadView()
  65. }
  66. override public func viewDidLoad() {
  67. super.viewDidLoad()
  68. self.setImageView(image: image!)
  69. deleteView.layer.cornerRadius = deleteView.bounds.height / 2
  70. deleteView.layer.borderWidth = 2.0
  71. deleteView.layer.borderColor = UIColor.white.cgColor
  72. deleteView.clipsToBounds = true
  73. let edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(screenEdgeSwiped))
  74. edgePan.edges = .bottom
  75. edgePan.delegate = self
  76. self.view.addGestureRecognizer(edgePan)
  77. NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow),
  78. name: UIResponder.keyboardDidShowNotification, object: nil)
  79. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide),
  80. name: UIResponder.keyboardWillHideNotification, object: nil)
  81. NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillChangeFrame(_:)),
  82. name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
  83. configureCollectionView()
  84. stickersViewController = StickersViewController(nibName: "StickersViewController", bundle: Bundle(for: StickersViewController.self))
  85. hideControls()
  86. }
  87. func configureCollectionView() {
  88. let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
  89. layout.itemSize = CGSize(width: 30, height: 30)
  90. layout.scrollDirection = .horizontal
  91. layout.minimumInteritemSpacing = 0
  92. layout.minimumLineSpacing = 0
  93. colorsCollectionView.collectionViewLayout = layout
  94. colorsCollectionViewDelegate = ColorsCollectionViewDelegate()
  95. colorsCollectionViewDelegate.colorDelegate = self
  96. if !colors.isEmpty {
  97. colorsCollectionViewDelegate.colors = colors
  98. }
  99. colorsCollectionView.delegate = colorsCollectionViewDelegate
  100. colorsCollectionView.dataSource = colorsCollectionViewDelegate
  101. colorsCollectionView.register(
  102. UINib(nibName: "ColorCollectionViewCell", bundle: Bundle(for: ColorCollectionViewCell.self)),
  103. forCellWithReuseIdentifier: "ColorCollectionViewCell")
  104. }
  105. func setImageView(image: UIImage) {
  106. imageView.image = image
  107. let size = image.suitableSize(widthLimit: UIScreen.main.bounds.width)
  108. imageViewHeightConstraint.constant = (size?.height)!
  109. }
  110. func hideToolbar(hide: Bool) {
  111. topToolbar.isHidden = hide
  112. topGradient.isHidden = hide
  113. bottomToolbar.isHidden = hide
  114. bottomGradient.isHidden = hide
  115. }
  116. }
  117. extension PhotoEditorViewController: ColorDelegate {
  118. func didSelectColor(color: UIColor) {
  119. if isDrawing {
  120. self.drawColor = color
  121. } else if activeTextView != nil {
  122. activeTextView?.textColor = color
  123. textColor = color
  124. }
  125. }
  126. }