Skip to content
This repository was archived by the owner on Jul 1, 2022. It is now read-only.

Commit 59b8363

Browse files
Skip saving to and loading from library access if allow library access is off.
1 parent f4829f1 commit 59b8363

File tree

2 files changed

+90
-37
lines changed

2 files changed

+90
-37
lines changed

ALCameraViewController/ViewController/CameraViewController.swift

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,11 @@ open class CameraViewController: UIViewController {
155155
view.translatesAutoresizingMaskIntoConstraints = false
156156
return view
157157
}()
158+
159+
private let allowsLibraryAccess: Bool
158160

159161
public init(croppingEnabled: Bool, allowsLibraryAccess: Bool = true, allowsSwapCameraOrientation: Bool = true, completion: @escaping CameraViewCompletion) {
162+
self.allowsLibraryAccess = allowsLibraryAccess
160163
super.init(nibName: nil, bundle: nil)
161164
onCompletion = completion
162165
allowCropping = croppingEnabled
@@ -504,6 +507,7 @@ open class CameraViewController: UIViewController {
504507
let spinner = showSpinner()
505508
cameraView.preview.isHidden = true
506509

510+
if allowsLibraryAccess {
507511
_ = SingleImageSaver()
508512
.setImage(image)
509513
.onSuccess { [weak self] asset in
@@ -517,8 +521,12 @@ open class CameraViewController: UIViewController {
517521
self?.hideSpinner(spinner)
518522
}
519523
.save()
524+
} else {
525+
self.layoutCameraResult(uiImage: image)
526+
self.hideSpinner(spinner)
527+
}
520528
}
521-
529+
522530
internal func close() {
523531
onCompletion?(nil, nil)
524532
onCompletion = nil
@@ -560,13 +568,37 @@ open class CameraViewController: UIViewController {
560568
cameraView.swapCameraInput()
561569
flashButton.isHidden = cameraView.currentPosition == AVCaptureDevicePosition.front
562570
}
563-
571+
572+
internal func layoutCameraResult(uiImage: UIImage) {
573+
cameraView.stopSession()
574+
startConfirmController(uiImage: uiImage)
575+
toggleButtons(enabled: true)
576+
}
577+
564578
internal func layoutCameraResult(asset: PHAsset) {
565579
cameraView.stopSession()
566580
startConfirmController(asset: asset)
567581
toggleButtons(enabled: true)
568582
}
569-
583+
584+
private func startConfirmController(uiImage: UIImage) {
585+
let confirmViewController = ConfirmViewController(image: uiImage, allowsCropping: allowCropping)
586+
confirmViewController.onComplete = { [weak self] image, asset in
587+
defer {
588+
self?.dismiss(animated: true, completion: nil)
589+
}
590+
591+
guard let image = image else {
592+
return
593+
}
594+
595+
self?.onCompletion?(image, asset)
596+
self?.onCompletion = nil
597+
}
598+
confirmViewController.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
599+
present(confirmViewController, animated: true, completion: nil)
600+
}
601+
570602
private func startConfirmController(asset: PHAsset) {
571603
let confirmViewController = ConfirmViewController(asset: asset, allowsCropping: allowCropping)
572604
confirmViewController.onComplete = { [weak self] image, asset in

ALCameraViewController/ViewController/ConfirmViewController.swift

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)