@@ -24,15 +24,26 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
2424
2525 public var onComplete : CameraViewCompletion ?
2626
27- var asset : PHAsset !
28-
27+ let asset : PHAsset ?
28+ let image : UIImage ?
29+
30+ public init ( image: UIImage , allowsCropping: Bool ) {
31+ self . allowsCropping = allowsCropping
32+ self . asset = nil
33+ self . image = image
34+ super. init ( nibName: " ConfirmViewController " , bundle: CameraGlobals . shared. bundle)
35+ }
36+
2937 public init ( asset: PHAsset , allowsCropping: Bool ) {
3038 self . allowsCropping = allowsCropping
3139 self . asset = asset
40+ self . image = nil
3241 super. init ( nibName: " ConfirmViewController " , bundle: CameraGlobals . shared. bundle)
3342 }
3443
3544 public required init ? ( coder aDecoder: NSCoder ) {
45+ asset = nil
46+ image = nil
3647 super. init ( coder: aDecoder)
3748 }
3849
@@ -55,28 +66,30 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
5566
5667 cropOverlay. isHidden = true
5768
58- guard let asset = asset else {
59- return
60- }
61-
6269 let spinner = showSpinner ( )
6370
6471 disable ( )
6572
66- _ = SingleImageFetcher ( )
67- . setAsset ( asset)
68- . setTargetSize ( largestPhotoSize ( ) )
69- . onSuccess { [ weak self] image in
70- self ? . configureWithImage ( image)
71- self ? . hideSpinner ( spinner)
72- self ? . enable ( )
73- }
74- . onFailure { [ weak self] error in
75- self ? . hideSpinner ( spinner)
76- }
77- . fetch ( )
73+ if let asset = asset {
74+ _ = SingleImageFetcher ( )
75+ . setAsset ( asset)
76+ . setTargetSize ( largestPhotoSize ( ) )
77+ . onSuccess { [ weak self] image in
78+ self ? . configureWithImage ( image)
79+ self ? . hideSpinner ( spinner)
80+ self ? . enable ( )
81+ }
82+ . onFailure { [ weak self] error in
83+ self ? . hideSpinner ( spinner)
84+ }
85+ . fetch ( )
86+ } else if let image = image {
87+ self . configureWithImage ( image)
88+ self . hideSpinner ( spinner)
89+ self . enable ( )
90+ }
7891 }
79-
92+
8093 public override func viewWillLayoutSubviews( ) {
8194 super. viewWillLayoutSubviews ( )
8295 let scale = calculateMinimumScale ( view. frame. size)
@@ -216,20 +229,28 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
216229
217230 let spinner = showSpinner ( )
218231
219- var fetcher = SingleImageFetcher ( )
220- . onSuccess { [ weak self] image in
221- self ? . onComplete ? ( image, self ? . asset)
222- self ? . hideSpinner ( spinner)
223- self ? . enable ( )
224- }
225- . onFailure { [ weak self] error in
226- self ? . hideSpinner ( spinner)
227- self ? . showNoImageScreen ( error)
228- }
229- . setAsset ( asset)
230-
232+ var fetcher : SingleImageFetcher ? = nil
233+
234+ if let asset = asset {
235+ fetcher = SingleImageFetcher ( )
236+ . onSuccess { [ weak self] image in
237+ self ? . onComplete ? ( image, self ? . asset)
238+ self ? . hideSpinner ( spinner)
239+ self ? . enable ( )
240+ }
241+ . onFailure { [ weak self] error in
242+ self ? . hideSpinner ( spinner)
243+ self ? . showNoImageScreen ( error)
244+ }
245+ . setAsset ( asset)
246+ } else {
247+ self . onComplete ? ( image, nil )
248+ self . hideSpinner ( spinner)
249+ self . enable ( )
250+ }
251+
231252 if allowsCropping {
232-
253+
233254 var cropRect = cropOverlay. frame
234255 cropRect. origin. x += scrollView. contentOffset. x
235256 cropRect. origin. y += scrollView. contentOffset. y
@@ -242,10 +263,10 @@ public class ConfirmViewController: UIViewController, UIScrollViewDelegate {
242263
243264 let rect = normalizedRect ( CGRect ( x: normalizedX, y: normalizedY, width: normalizedWidth, height: normalizedHeight) , orientation: imageView. image!. imageOrientation)
244265
245- fetcher = fetcher. setCropRect ( rect)
266+ fetcher = fetcher? . setCropRect ( rect)
246267 }
247268
248- fetcher = fetcher. fetch ( )
269+ fetcher = fetcher? . fetch ( )
249270 }
250271
251272 public func viewForZooming( in scrollView: UIScrollView ) -> UIView ? {
0 commit comments