Skip to content

Commit 78c5af8

Browse files
authored
Merge pull request #78 from shih-liang/main
New feature: scan code from album
2 parents 273e720 + 7848896 commit 78c5af8

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

Sources/CodeScanner/CodeScanner.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
5959

6060
public let codeTypes: [AVMetadataObject.ObjectType]
6161
public let scanMode: ScanMode
62+
public let manualSelect: Bool
6263
public let scanInterval: Double
6364
public let showViewfinder: Bool
6465
public var simulatedData = ""
@@ -71,6 +72,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
7172
public init(
7273
codeTypes: [AVMetadataObject.ObjectType],
7374
scanMode: ScanMode = .once,
75+
manualSelect: Bool = false,
7476
scanInterval: Double = 2.0,
7577
showViewfinder: Bool = false,
7678
simulatedData: String = "",
@@ -82,6 +84,7 @@ public struct CodeScannerView: UIViewControllerRepresentable {
8284
) {
8385
self.codeTypes = codeTypes
8486
self.scanMode = scanMode
87+
self.manualSelect = manualSelect
8588
self.showViewfinder = showViewfinder
8689
self.scanInterval = scanInterval
8790
self.simulatedData = simulatedData
@@ -107,7 +110,8 @@ public struct CodeScannerView: UIViewControllerRepresentable {
107110
uiViewController.updateViewController(
108111
isTorchOn: isTorchOn,
109112
isGalleryPresented: isGalleryPresented.wrappedValue,
110-
isManualCapture: scanMode == .manual
113+
isManualCapture: scanMode == .manual,
114+
isManualSelect: manualSelect
111115
)
112116
}
113117

Sources/CodeScanner/ScannerViewController.swift

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,17 @@ extension CodeScannerView {
150150
return button
151151
}()
152152

153+
private lazy var manualSelectButton: UIButton = {
154+
let button = UIButton(type: .system)
155+
let image = UIImage(systemName: "photo.on.rectangle")
156+
let background = UIImage(systemName: "capsule.fill")?.withTintColor(.systemBackground, renderingMode: .alwaysOriginal)
157+
button.setImage(image, for: .normal)
158+
button.setBackgroundImage(background, for: .normal)
159+
button.addTarget(self, action: #selector(openGalleryFromButton), for: .touchUpInside)
160+
button.translatesAutoresizingMaskIntoConstraints = false
161+
return button
162+
}()
163+
153164
override public func viewDidLoad() {
154165
super.viewDidLoad()
155166
self.addOrientationDidChangeObserver()
@@ -362,9 +373,23 @@ extension CodeScannerView {
362373
manualCaptureButton.isHidden = !isManualCapture
363374
}
364375

376+
func showManualSelectButton(_ isManualSelect: Bool) {
377+
if manualSelectButton.superview == nil {
378+
view.addSubview(manualSelectButton)
379+
NSLayoutConstraint.activate([
380+
manualSelectButton.heightAnchor.constraint(equalToConstant: 50),
381+
manualSelectButton.widthAnchor.constraint(equalToConstant: 60),
382+
view.centerXAnchor.constraint(equalTo: manualSelectButton.centerXAnchor),
383+
view.safeAreaLayoutGuide.bottomAnchor.constraint(equalTo: manualSelectButton.bottomAnchor, constant: 32)
384+
])
385+
}
386+
387+
view.bringSubviewToFront(manualSelectButton)
388+
manualSelectButton.isHidden = !isManualSelect
389+
}
365390
#endif
366391

367-
func updateViewController(isTorchOn: Bool, isGalleryPresented: Bool, isManualCapture: Bool) {
392+
func updateViewController(isTorchOn: Bool, isGalleryPresented: Bool, isManualCapture: Bool, isManualSelect: Bool) {
368393
if let backCamera = AVCaptureDevice.default(for: AVMediaType.video),
369394
backCamera.hasTorch
370395
{
@@ -379,6 +404,7 @@ extension CodeScannerView {
379404

380405
#if !targetEnvironment(simulator)
381406
showManualCaptureButton(isManualCapture)
407+
showManualSelectButton(isManualSelect)
382408
#endif
383409
}
384410

0 commit comments

Comments
 (0)