@@ -18,33 +18,37 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
1818 @IBOutlet weak var confirmButton : UIButton !
1919 @IBOutlet weak var centeringView : UIView !
2020
21- var allowsCropping : Bool = false
21+ var croppingParameters : CroppingParameters {
22+ didSet {
23+ cropOverlay. isResizable = croppingParameters. allowResizing
24+ cropOverlay. minimumSize = croppingParameters. minimumSize
25+ }
26+ }
27+
2228 var verticalPadding : CGFloat = 30
2329 var horizontalPadding : CGFloat = 30
2430
2531 public var onComplete : CameraViewCompletion ?
26-
32+
2733 let asset : PHAsset ?
2834 let image : UIImage ?
2935
30- public init ( image: UIImage , allowsCropping : Bool ) {
31- self . allowsCropping = allowsCropping
36+ public init ( image: UIImage , croppingParameters : CroppingParameters ) {
37+ self . croppingParameters = croppingParameters
3238 self . asset = nil
3339 self . image = image
3440 super. init ( nibName: " ConfirmViewController " , bundle: CameraGlobals . shared. bundle)
3541 }
3642
37- public init ( asset: PHAsset , allowsCropping : Bool ) {
38- self . allowsCropping = allowsCropping
43+ public init ( asset: PHAsset , croppingParameters : CroppingParameters ) {
44+ self . croppingParameters = croppingParameters
3945 self . asset = asset
4046 self . image = nil
4147 super. init ( nibName: " ConfirmViewController " , bundle: CameraGlobals . shared. bundle)
4248 }
4349
44- public required init ? ( coder aDecoder: NSCoder ) {
45- asset = nil
46- image = nil
47- super. init ( coder: aDecoder)
50+ public required init ? ( coder aDecoder: NSCoder ) {
51+ fatalError ( " init(coder:) has not been implemented " )
4852 }
4953
5054 public override var prefersStatusBarHidden : Bool {
@@ -57,15 +61,17 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
5761
5862 public override func viewDidLoad( ) {
5963 super. viewDidLoad ( )
60-
64+
6165 view. backgroundColor = UIColor . black
6266
6367 scrollView. addSubview ( imageView)
6468 scrollView. delegate = self
6569 scrollView. maximumZoomScale = 1
6670
67- cropOverlay. isHidden = true
68-
71+ cropOverlay. isHidden = true
72+ cropOverlay. isResizable = croppingParameters. allowResizing
73+ cropOverlay. minimumSize = croppingParameters. minimumSize
74+
6975 let spinner = showSpinner ( )
7076
7177 disable ( )
@@ -93,7 +99,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
9399 public override func viewWillLayoutSubviews( ) {
94100 super. viewWillLayoutSubviews ( )
95101 let scale = calculateMinimumScale ( view. frame. size)
96- let frame = allowsCropping ? cropOverlay. frame : view. bounds
102+ let frame = croppingParameters . isEnabled ? cropOverlay. frame : view. bounds
97103
98104 scrollView. contentInset = calculateScrollViewInsets ( frame)
99105 scrollView. minimumZoomScale = scale
@@ -108,7 +114,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
108114 let scale = calculateMinimumScale ( size)
109115 var frame = view. bounds
110116
111- if allowsCropping {
117+ if croppingParameters . isEnabled {
112118 frame = cropOverlay. frame
113119 let centeringFrame = centeringView. frame
114120 var origin : CGPoint
@@ -139,11 +145,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
139145 }
140146
141147 private func configureWithImage( _ image: UIImage ) {
142- if allowsCropping {
143- cropOverlay. isHidden = false
144- } else {
145- cropOverlay. isHidden = true
146- }
148+ cropOverlay. isHidden = !croppingParameters. isEnabled
147149
148150 buttonActions ( )
149151
@@ -155,7 +157,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
155157 private func calculateMinimumScale( _ size: CGSize ) -> CGFloat {
156158 var _size = size
157159
158- if allowsCropping {
160+ if croppingParameters . isEnabled {
159161 _size = cropOverlay. frame. size
160162 }
161163
@@ -168,7 +170,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
168170
169171 var scale : CGFloat
170172
171- if allowsCropping {
173+ if croppingParameters . isEnabled {
172174 scale = max ( scaleWidth, scaleHeight)
173175 } else {
174176 scale = min ( scaleWidth, scaleHeight)
@@ -185,8 +187,8 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
185187 }
186188
187189 private func centerImageViewOnRotate( ) {
188- if allowsCropping {
189- let size = allowsCropping ? cropOverlay. frame . size : scrollView . frame. size
190+ if croppingParameters . isEnabled {
191+ let size = cropOverlay. frame. size
190192 let scrollInsets = scrollView. contentInset
191193 let imageSize = imageView. frame. size
192194 var contentOffset = CGPoint ( x: - scrollInsets. left, y: - scrollInsets. top)
@@ -197,7 +199,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
197199 }
198200
199201 private func centerScrollViewContents( ) {
200- let size = allowsCropping ? cropOverlay. frame. size : scrollView. frame. size
202+ let size = croppingParameters . isEnabled ? cropOverlay. frame. size : scrollView. frame. size
201203 let imageSize = imageView. frame. size
202204 var imageOrigin = CGPoint . zero
203205
@@ -245,7 +247,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
245247 self ? . showNoImageScreen ( error)
246248 }
247249 . setAsset ( asset)
248- if allowsCropping {
250+ if croppingParameters . isEnabled {
249251 let rect = normalizedRect ( makeProportionalCropRect ( ) , orientation: image. imageOrientation)
250252 fetcher = fetcher. setCropRect ( rect)
251253 }
@@ -254,7 +256,7 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
254256 } else {
255257 var newImage = image
256258
257- if allowsCropping {
259+ if croppingParameters . isEnabled {
258260 let cropRect = makeProportionalCropRect ( )
259261 let resizedCropRect = CGRect ( x: ( image. size. width) * cropRect. origin. x,
260262 y: ( image. size. height) * cropRect. origin. y,
@@ -311,7 +313,10 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
311313 }
312314
313315 private func makeProportionalCropRect( ) -> CGRect {
314- var cropRect = cropOverlay. frame
316+ var cropRect = CGRect ( x: cropOverlay. frame. origin. x + cropOverlay. outterGap,
317+ y: cropOverlay. frame. origin. y + cropOverlay. outterGap,
318+ width: cropOverlay. frame. size. width - 2 * cropOverlay. outterGap,
319+ height: cropOverlay. frame. size. height - 2 * cropOverlay. outterGap)
315320 cropRect. origin. x += scrollView. contentOffset. x
316321 cropRect. origin. y += scrollView. contentOffset. y
317322
0 commit comments