Skip to content

Commit e398cf8

Browse files
committed
Add bar code to scan code generator demo
1 parent 8c9c19c commit e398cf8

File tree

8 files changed

+123
-89
lines changed

8 files changed

+123
-89
lines changed

Demo/Demo.xcodeproj/project.pbxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
A901F081256F963E00F1C285 /* SharingScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F07F256F963E00F1C285 /* SharingScreen.swift */; };
2828
A901F085256F964600F1C285 /* ViewsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F084256F964600F1C285 /* ViewsScreen.swift */; };
2929
A901F086256F964600F1C285 /* ViewsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F084256F964600F1C285 /* ViewsScreen.swift */; };
30-
A901F099256FAF0100F1C285 /* QrCodeGeneratorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F098256FAF0100F1C285 /* QrCodeGeneratorScreen.swift */; };
31-
A901F09A256FAF0100F1C285 /* QrCodeGeneratorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F098256FAF0100F1C285 /* QrCodeGeneratorScreen.swift */; };
30+
A901F099256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F098256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift */; };
31+
A901F09A256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F098256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift */; };
3232
A901F0A0256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F09F256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift */; };
3333
A901F0A1256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F09F256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift */; };
3434
A901F0BC256FBFF700F1C285 /* SwipeGestureScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A901F0BB256FBFF700F1C285 /* SwipeGestureScreen.swift */; };
@@ -121,7 +121,7 @@
121121
A901F07A256F963400F1C285 /* PickersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickersScreen.swift; sourceTree = "<group>"; };
122122
A901F07F256F963E00F1C285 /* SharingScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingScreen.swift; sourceTree = "<group>"; };
123123
A901F084256F964600F1C285 /* ViewsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewsScreen.swift; sourceTree = "<group>"; };
124-
A901F098256FAF0100F1C285 /* QrCodeGeneratorScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QrCodeGeneratorScreen.swift; sourceTree = "<group>"; };
124+
A901F098256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanCodeGeneratorScreen.swift; sourceTree = "<group>"; };
125125
A901F09F256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsPersistedScreen.swift; sourceTree = "<group>"; };
126126
A901F0BB256FBFF700F1C285 /* SwipeGestureScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeGestureScreen.swift; sourceTree = "<group>"; };
127127
A901F0CA256FE62E00F1C285 /* AlertsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertsScreen.swift; sourceTree = "<group>"; };
@@ -218,7 +218,7 @@
218218
isa = PBXGroup;
219219
children = (
220220
A901F039256F8CA600F1C285 /* DataScreen.swift */,
221-
A901F098256FAF0100F1C285 /* QrCodeGeneratorScreen.swift */,
221+
A901F098256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift */,
222222
A901F09F256FAF9A00F1C285 /* UserDefaultsPersistedScreen.swift */,
223223
);
224224
path = Data;
@@ -563,7 +563,7 @@
563563
isa = PBXSourcesBuildPhase;
564564
buildActionMask = 2147483647;
565565
files = (
566-
A901F099256FAF0100F1C285 /* QrCodeGeneratorScreen.swift in Sources */,
566+
A901F099256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift in Sources */,
567567
A901F0DF256FE65E00F1C285 /* DemoPresentable.swift in Sources */,
568568
A9F85336259B4D9200C98870 /* WebViewScreen.swift in Sources */,
569569
A901F044256F8CBC00F1C285 /* GesturesScreen.swift in Sources */,
@@ -616,7 +616,7 @@
616616
isa = PBXSourcesBuildPhase;
617617
buildActionMask = 2147483647;
618618
files = (
619-
A901F09A256FAF0100F1C285 /* QrCodeGeneratorScreen.swift in Sources */,
619+
A901F09A256FAF0100F1C285 /* ScanCodeGeneratorScreen.swift in Sources */,
620620
A901F0E0256FE65E00F1C285 /* DemoPresentable.swift in Sources */,
621621
A9F85337259B4D9200C98870 /* WebViewScreen.swift in Sources */,
622622
A901F045256F8CBC00F1C285 /* GesturesScreen.swift in Sources */,
@@ -909,8 +909,8 @@
909909
isa = XCRemoteSwiftPackageReference;
910910
repositoryURL = "https://github.com/danielsaidi/SwiftUIKit.git";
911911
requirement = {
912-
kind = upToNextMajorVersion;
913-
minimumVersion = 1.6.0;
912+
branch = master;
913+
kind = branch;
914914
};
915915
};
916916
/* End XCRemoteSwiftPackageReference section */

Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
-4.65 KB
Binary file not shown.

Demo/Shared/Data/DataScreen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ struct DataScreen: View {
1818
}
1919

2020
Section(header: Text("Utils")) {
21-
MenuListItem(icon: .qrCode, title: "Qr Code Generator")
22-
.navigationLink(to: QrCodeGeneratorScreen())
21+
MenuListItem(icon: .qrCode, title: "Scan Code Generator")
22+
.navigationLink(to: ScanCodeGeneratorScreen())
2323
MenuListItem(icon: .data, title: "UserDefaults Persisted")
2424
.navigationLink(to: UserDefaultsPersistedScreen())
2525
}

Demo/Shared/Data/QrCodeGeneratorScreen.swift

Lines changed: 0 additions & 76 deletions
This file was deleted.
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
//
2+
// ScanCodeGeneratorScreen.swift
3+
// Demo
4+
//
5+
// Created by Daniel Saidi on 2020-11-26.
6+
// Copyright © 2020 Daniel Saidi. All rights reserved.
7+
//
8+
9+
import SwiftUI
10+
import SwiftUIKit
11+
12+
struct ScanCodeGeneratorScreen: View {
13+
14+
init(generator: ScanCodeGenerator = StandardScanCodeGenerator(scale: 100)) {
15+
self.generator = generator
16+
}
17+
18+
private let generator: ScanCodeGenerator
19+
20+
@State private var number = "123456"
21+
@State private var urlString = "https://picsum.photos/200/300"
22+
23+
@StateObject private var sheetContext = SheetContext()
24+
25+
var body: some View {
26+
MenuList("ScanCodeGenerator") {
27+
Section {
28+
MenuListText("Enter a number and a url and tap the bottom buttons to generate scan codes.")
29+
}
30+
31+
Section(header: Text("Number")) {
32+
TextField("Enter number", text: $number)
33+
}
34+
35+
Section(header: Text("URL")) {
36+
TextField("Enter URL", text: $urlString)
37+
}
38+
39+
Section(header: Text("Actions")) {
40+
MenuListItem(icon: .barcode, title: "Show barcode for number")
41+
.button(action: showBarode)
42+
.enabled(hasNumber)
43+
MenuListItem(icon: .qrCode, title: "Show QR Code for url")
44+
.button(action: showQrCode)
45+
.enabled(hasUrl)
46+
}
47+
}
48+
.sheet(context: sheetContext)
49+
}
50+
}
51+
52+
private extension ScanCodeGeneratorScreen {
53+
54+
var hasNumber: Bool { !number.trimmingCharacters(in: .whitespaces).isEmpty }
55+
56+
var hasUrl: Bool { URL(string: urlString) != nil }
57+
}
58+
59+
private extension ScanCodeGeneratorScreen {
60+
61+
func showBarode() {
62+
guard let image = generator.generateCodeView(.barcode, from: number) else { return }
63+
sheetContext.present(
64+
NavigationView {
65+
VStack {
66+
Spacer()
67+
image
68+
.resizable()
69+
.aspectRatio(contentMode: .fit)
70+
Text(number).font(.footnote)
71+
Spacer()
72+
}
73+
74+
.navigationTitle("Scan, ohoy!")
75+
}
76+
)
77+
}
78+
79+
func showQrCode() {
80+
guard let image = generator.generateCodeView(.qr, from: urlString) else { return }
81+
sheetContext.present(
82+
NavigationView {
83+
VStack {
84+
Spacer()
85+
image
86+
.resizable()
87+
.aspectRatio(contentMode: .fit)
88+
Text(urlString).font(.footnote)
89+
Spacer()
90+
}
91+
92+
.navigationTitle("Scan, ohoy!")
93+
}
94+
)
95+
}
96+
}
97+
98+
struct ScanCodeGeneratorScreen_Previews: PreviewProvider {
99+
static var previews: some View {
100+
NavigationView {
101+
ScanCodeGeneratorScreen()
102+
}
103+
}
104+
}

Demo/Shared/Resources/Image+Demo.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SwiftUI
1111
extension Image {
1212

1313
static var alert: Image { Image(systemName: "rectangle.center.inset.fill") }
14+
static var barcode: Image { Image(systemName: "barcode") }
1415
static var blur: Image { Image(systemName: "face.dashed") }
1516
static var camera: Image { Image(systemName: "camera") }
1617
static var circularProgressBar: Image { Image(systemName: "timer") }

Demo/Shared/Views/FlipViewScreen.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,23 @@ import SwiftUI
1111
import SwiftUIKit
1212

1313
struct FlipViewScreen: View {
14+
15+
@State private var isFlippedHorizontally = false
16+
@State private var isFlippedVertically = false
1417

1518
var body: some View {
1619
VStack {
1720
MenuListText("These views have a front and a back face and can be flipped by tapping ot swiping.")
1821
FlipView(
1922
front: side(.blue, "Flip me horizontally!"),
2023
back: side(.red, "Flip me back!"),
24+
isFlipped: $isFlippedHorizontally,
2125
tapDirection: .right,
2226
swipeDirections: [.left, .right])
2327
FlipView(
2428
front: side(.blue, "Flip me vertically!"),
2529
back: side(.red, "Flip me back!"),
30+
isFlipped: $isFlippedVertically,
2631
tapDirection: .up,
2732
swipeDirections: [.up, .down])
2833
}

0 commit comments

Comments
 (0)