123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // ViewController.swift
- // Photo Editor
- //
- // Created by Mohamed Hamed on 4/23/17.
- // Copyright © 2017 Mohamed Hamed. All rights reserved.
- //
- import UIKit
- public final class PhotoEditorViewController: UIViewController {
-
- /** holding the 2 imageViews original image and drawing & stickers */
- @IBOutlet weak var canvasView: UIView!
- //To hold the image
- @IBOutlet var imageView: UIImageView!
- @IBOutlet weak var imageViewHeightConstraint: NSLayoutConstraint!
- //To hold the drawings and stickers
- @IBOutlet weak var canvasImageView: UIImageView!
- @IBOutlet weak var topToolbar: UIView!
- @IBOutlet weak var bottomToolbar: UIView!
- @IBOutlet weak var topGradient: UIView!
- @IBOutlet weak var bottomGradient: UIView!
-
- @IBOutlet weak var doneButton: UIButton!
- @IBOutlet weak var deleteView: UIView!
- @IBOutlet weak var colorsCollectionView: UICollectionView!
- @IBOutlet weak var colorPickerView: UIView!
- @IBOutlet weak var colorPickerViewBottomConstraint: NSLayoutConstraint!
-
- //Controls
- @IBOutlet weak var cropButton: UIButton!
- @IBOutlet weak var stickerButton: UIButton!
- @IBOutlet weak var drawButton: UIButton!
- @IBOutlet weak var textButton: UIButton!
- @IBOutlet weak var saveButton: UIButton!
- @IBOutlet weak var shareButton: UIButton!
- @IBOutlet weak var clearButton: UIButton!
-
- public var image: UIImage?
- /**
- Array of Stickers -UIImage- that the user will choose from
- */
- public var stickers : [UIImage] = []
- /**
- Array of Colors that will show while drawing or typing
- */
- public var colors : [UIColor] = []
-
- public var photoEditorDelegate: PhotoEditorDelegate?
- var colorsCollectionViewDelegate: ColorsCollectionViewDelegate!
-
- // list of controls to be hidden
- public var hiddenControls : [control] = []
-
- var stickersVCIsVisible = false
- var drawColor: UIColor = UIColor.black
- var textColor: UIColor = UIColor.white
- var isDrawing: Bool = false
- var lastPoint: CGPoint!
- var swiped = false
- var lastPanPoint: CGPoint?
- var lastTextViewTransform: CGAffineTransform?
- var lastTextViewTransCenter: CGPoint?
- var lastTextViewFont:UIFont?
- var activeTextView: UITextView?
- var imageViewToPan: UIImageView?
- var isTyping: Bool = false
-
-
- var stickersViewController: StickersViewController!
- //Register Custom font before we load XIB
- public override func loadView() {
- registerFont()
- super.loadView()
- }
-
- override public func viewDidLoad() {
- super.viewDidLoad()
- self.setImageView(image: image!)
-
- deleteView.layer.cornerRadius = deleteView.bounds.height / 2
- deleteView.layer.borderWidth = 2.0
- deleteView.layer.borderColor = UIColor.white.cgColor
- deleteView.clipsToBounds = true
-
- let edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(screenEdgeSwiped))
- edgePan.edges = .bottom
- edgePan.delegate = self
- self.view.addGestureRecognizer(edgePan)
-
- NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow),
- name: UIResponder.keyboardDidShowNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide),
- name: UIResponder.keyboardWillHideNotification, object: nil)
- NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillChangeFrame(_:)),
- name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
-
-
- configureCollectionView()
- stickersViewController = StickersViewController(nibName: "StickersViewController", bundle: Bundle(for: StickersViewController.self))
- hideControls()
- }
-
- func configureCollectionView() {
- let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
- layout.itemSize = CGSize(width: 30, height: 30)
- layout.scrollDirection = .horizontal
- layout.minimumInteritemSpacing = 0
- layout.minimumLineSpacing = 0
- colorsCollectionView.collectionViewLayout = layout
- colorsCollectionViewDelegate = ColorsCollectionViewDelegate()
- colorsCollectionViewDelegate.colorDelegate = self
- if !colors.isEmpty {
- colorsCollectionViewDelegate.colors = colors
- }
- colorsCollectionView.delegate = colorsCollectionViewDelegate
- colorsCollectionView.dataSource = colorsCollectionViewDelegate
-
- colorsCollectionView.register(
- UINib(nibName: "ColorCollectionViewCell", bundle: Bundle(for: ColorCollectionViewCell.self)),
- forCellWithReuseIdentifier: "ColorCollectionViewCell")
- }
-
- func setImageView(image: UIImage) {
- imageView.image = image
- let size = image.suitableSize(widthLimit: UIScreen.main.bounds.width)
- imageViewHeightConstraint.constant = (size?.height)!
- }
-
- func hideToolbar(hide: Bool) {
- topToolbar.isHidden = hide
- topGradient.isHidden = hide
- bottomToolbar.isHidden = hide
- bottomGradient.isHidden = hide
- }
- }
- extension PhotoEditorViewController: ColorDelegate {
- func didSelectColor(color: UIColor) {
- if isDrawing {
- self.drawColor = color
- } else if activeTextView != nil {
- activeTextView?.textColor = color
- textColor = color
- }
- }
- }
|