From a98aa2ff2e556188d00b6888e035c15d574447b1 Mon Sep 17 00:00:00 2001 From: Eugene Mozharovsky Date: Sun, 27 Nov 2016 00:23:14 +0300 Subject: [PATCH] Ignoring scrolling/zooming gestures on the bottom static line view #3 --- .../CropViewController.swift | 8 ++--- Source/CropableScrollViewDelegate.swift | 34 ++++++++++++++++--- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/Example/Athlee-ImagePicker/Athlee-ImagePicker/CropViewController.swift b/Example/Athlee-ImagePicker/Athlee-ImagePicker/CropViewController.swift index 7de6142..ce20520 100644 --- a/Example/Athlee-ImagePicker/Athlee-ImagePicker/CropViewController.swift +++ b/Example/Athlee-ImagePicker/Athlee-ImagePicker/CropViewController.swift @@ -81,7 +81,7 @@ final class CropViewController: UIViewController, FloatingViewLayout, Cropable { updateContent() } - var recognizersAdded = false + fileprivate var recognizersAdded = false override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) @@ -153,10 +153,10 @@ final class CropViewController: UIViewController, FloatingViewLayout, Cropable { } func updateCropViewScrolling() { - if state == .folded || state == .moved { - cropView.isUserInteractionEnabled = false + if state == .moved { + delegate.isEnabled = false } else { - cropView.isUserInteractionEnabled = true + delegate.isEnabled = true } } diff --git a/Source/CropableScrollViewDelegate.swift b/Source/CropableScrollViewDelegate.swift index b58b118..cefaccf 100644 --- a/Source/CropableScrollViewDelegate.swift +++ b/Source/CropableScrollViewDelegate.swift @@ -16,7 +16,21 @@ open class CropableScrollViewDelegate: NSObject, UIScrollViewDelega open let linesView = LinesView() - fileprivate var panning = false + /// Indicates whether cropping should or should not be enabled for using. + open var isEnabled = true { + didSet { + if isEnabled { + cropable.cropView.isScrollEnabled = true + } else { + cropable.highlightArea(false, animated: false) + cropable.cropView.isScrollEnabled = false + } + } + } + + fileprivate var isPanning = false + + // MARK: Initialization public init(cropable: T) { self.cropable = cropable @@ -25,19 +39,25 @@ open class CropableScrollViewDelegate: NSObject, UIScrollViewDelega // MARK: UIScrollViewDelegate open func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) { + guard isEnabled else { return } + cropable.willZoom() } open func scrollViewDidZoom(_ scrollView: UIScrollView) { + guard isEnabled else { return } + cropable.didZoom() } open func scrollViewDidScroll(_ scrollView: UIScrollView) { + guard isEnabled else { return } + if cropable.alwaysShowGuidelines { cropable.highlightArea(true) } - guard panning else { + guard isPanning else { return } @@ -45,12 +65,16 @@ open class CropableScrollViewDelegate: NSObject, UIScrollViewDelega } open func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { - panning = true + guard isEnabled else { return } + + isPanning = true cropable.highlightArea(true) } open func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { - panning = false + guard isEnabled else { return } + + isPanning = false if cropable.alwaysShowGuidelines { cropable.highlightArea(true, animated: false) @@ -60,6 +84,8 @@ open class CropableScrollViewDelegate: NSObject, UIScrollViewDelega } open func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) { + guard isEnabled else { return } + cropable.willEndZooming() cropable.didEndZooming() }