From 5d702e4c4cf2259a8904d88a1f2f94449d294a75 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Wed, 24 May 2023 14:39:22 +0300 Subject: [PATCH 01/12] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 0 -> 18187 bytes smartClass/ContentView.swift | 2 -- 2 files changed, 2 deletions(-) create mode 100644 smartClass.xcodeproj/project.xcworkspace/xcuserdata/idevnva.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/smartClass.xcodeproj/project.xcworkspace/xcuserdata/idevnva.xcuserdatad/UserInterfaceState.xcuserstate b/smartClass.xcodeproj/project.xcworkspace/xcuserdata/idevnva.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..50f6d4f6901815c011e8b10895b4a86d5d478fb3 GIT binary patch literal 18187 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 JBWR^({~x_3-0A=T literal 0 HcmV?d00001 diff --git a/smartClass/ContentView.swift b/smartClass/ContentView.swift index 9c02f9a..ce69487 100644 --- a/smartClass/ContentView.swift +++ b/smartClass/ContentView.swift @@ -15,8 +15,6 @@ struct ContentView: View { .foregroundColor(.accentColor) Text("Hello, world!") .customFont(font: FontManager.Nunito.black, size: 20) - Text("Hello, world!") - .customFont(font: FontManager.Nunito.black, size: 20) } .padding() } From ccafd4a9b0824056e2df34de799d019f1a6888da Mon Sep 17 00:00:00 2001 From: volt901 <89735853+volt901@users.noreply.github.com> Date: Thu, 25 May 2023 22:27:27 +0500 Subject: [PATCH 02/12] =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20/=20=D1=80=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BC=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 4 ++++ smartClass/Registration.swift | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 smartClass/Registration.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 16ead9d..a346aa1 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -18,6 +19,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -66,6 +68,7 @@ A8700E002A1DDB6B00D60253 /* Fonts */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, + 7DEB87812A1FD08C00872D9A /* Registration.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -180,6 +183,7 @@ A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, + 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/smartClass/Registration.swift b/smartClass/Registration.swift new file mode 100644 index 0000000..c601b0f --- /dev/null +++ b/smartClass/Registration.swift @@ -0,0 +1,20 @@ +// +// Registration.swift +// smartClass +// +// Created by Владимир Ширяев on 25.05.2023. +// + +import SwiftUI + +struct Registration: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +struct Registration_Previews: PreviewProvider { + static var previews: some View { + Registration() + } +} From 6410ae46fcdc6bc4e889e713cf9f244390efe867 Mon Sep 17 00:00:00 2001 From: volt901 <89735853+volt901@users.noreply.github.com> Date: Thu, 25 May 2023 23:12:59 +0500 Subject: [PATCH 03/12] =?UTF-8?q?=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 4 ++++ smartClass/SwiftUIView.swift | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 smartClass/SwiftUIView.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index a346aa1..807f363 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; + 7DEB87842A1FDC9F00872D9A /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -20,6 +21,7 @@ /* Begin PBXFileReference section */ 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; + 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -69,6 +71,7 @@ A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, 7DEB87812A1FD08C00872D9A /* Registration.swift */, + 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -180,6 +183,7 @@ buildActionMask = 2147483647; files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, + 7DEB87842A1FDC9F00872D9A /* SwiftUIView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, diff --git a/smartClass/SwiftUIView.swift b/smartClass/SwiftUIView.swift new file mode 100644 index 0000000..47e455b --- /dev/null +++ b/smartClass/SwiftUIView.swift @@ -0,0 +1,20 @@ +// +// SwiftUIView.swift +// smartClass +// +// Created by Владимир Ширяев on 25.05.2023. +// + +import SwiftUI + +struct SwiftUIView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +struct SwiftUIView_Previews: PreviewProvider { + static var previews: some View { + SwiftUIView() + } +} From f55439b12a1388c8753578e06df2dfd38bb92574 Mon Sep 17 00:00:00 2001 From: volt901 <89735853+volt901@users.noreply.github.com> Date: Thu, 25 May 2023 23:14:54 +0500 Subject: [PATCH 04/12] =?UTF-8?q?=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 4 ---- smartClass/SwiftUIView.swift | 20 -------------------- 2 files changed, 24 deletions(-) delete mode 100644 smartClass/SwiftUIView.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 807f363..a346aa1 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; - 7DEB87842A1FDC9F00872D9A /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -21,7 +20,6 @@ /* Begin PBXFileReference section */ 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; - 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -71,7 +69,6 @@ A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, 7DEB87812A1FD08C00872D9A /* Registration.swift */, - 7DEB87832A1FDC9F00872D9A /* SwiftUIView.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -183,7 +180,6 @@ buildActionMask = 2147483647; files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, - 7DEB87842A1FDC9F00872D9A /* SwiftUIView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, diff --git a/smartClass/SwiftUIView.swift b/smartClass/SwiftUIView.swift deleted file mode 100644 index 47e455b..0000000 --- a/smartClass/SwiftUIView.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// SwiftUIView.swift -// smartClass -// -// Created by Владимир Ширяев on 25.05.2023. -// - -import SwiftUI - -struct SwiftUIView: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) - } -} - -struct SwiftUIView_Previews: PreviewProvider { - static var previews: some View { - SwiftUIView() - } -} From 02acf68fa41ad9f0d7e9bda7b20543957a77772c Mon Sep 17 00:00:00 2001 From: volt901 <89735853+volt901@users.noreply.github.com> Date: Thu, 25 May 2023 23:18:40 +0500 Subject: [PATCH 05/12] =?UTF-8?q?=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 4 ++++ smartClass/SwiftUIView.swift | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 smartClass/SwiftUIView.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index a346aa1..1be7251 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; + 7DEB87862A1FDDF800872D9A /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -20,6 +21,7 @@ /* Begin PBXFileReference section */ 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; + 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -69,6 +71,7 @@ A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, 7DEB87812A1FD08C00872D9A /* Registration.swift */, + 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -180,6 +183,7 @@ buildActionMask = 2147483647; files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, + 7DEB87862A1FDDF800872D9A /* SwiftUIView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, diff --git a/smartClass/SwiftUIView.swift b/smartClass/SwiftUIView.swift new file mode 100644 index 0000000..47e455b --- /dev/null +++ b/smartClass/SwiftUIView.swift @@ -0,0 +1,20 @@ +// +// SwiftUIView.swift +// smartClass +// +// Created by Владимир Ширяев on 25.05.2023. +// + +import SwiftUI + +struct SwiftUIView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +struct SwiftUIView_Previews: PreviewProvider { + static var previews: some View { + SwiftUIView() + } +} From 735c4336c837a02e0214e527b4d348dd3767f76f Mon Sep 17 00:00:00 2001 From: volt901 Date: Sun, 28 May 2023 19:12:33 +0500 Subject: [PATCH 06/12] =?UTF-8?q?=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 40 +++- .../Assets.xcassets/Screen/Contents.json | 6 + .../Screen/SecondStart.imageset/Contents.json | 21 ++ .../SecondStart.imageset/SecondStart.svg | 164 +++++++++++++++ .../Screen/StartScreen.imageset/Contents.json | 21 ++ .../StartScreen.imageset/StartScreen.svg | 56 +++++ .../Screen/hello.imageset/Contents.json | 21 ++ .../Screen/hello.imageset/hello.svg | 198 ++++++++++++++++++ smartClass/ContentView.swift | 9 +- smartClass/Element/TextFieldView.swift | 26 +++ smartClass/Greeting.swift | 60 ++++++ smartClass/GreetingTwo.swift | 63 ++++++ smartClass/Logon.swift | 90 ++++++++ smartClass/Registration.swift | 183 +++++++++++++++- smartClass/SwiftUIView.swift | 20 -- 15 files changed, 944 insertions(+), 34 deletions(-) create mode 100644 smartClass/Assets.xcassets/Screen/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg create mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg create mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg create mode 100644 smartClass/Element/TextFieldView.swift create mode 100644 smartClass/Greeting.swift create mode 100644 smartClass/GreetingTwo.swift create mode 100644 smartClass/Logon.swift delete mode 100644 smartClass/SwiftUIView.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 1be7251..5ad1f38 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,8 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5D92A227FB2002869F7 /* Logon.swift */; }; + 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DC2A228004002869F7 /* TextFieldView.swift */; }; + 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DE2A2359A4002869F7 /* Greeting.swift */; }; 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; - 7DEB87862A1FDDF800872D9A /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */; }; + 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -20,8 +23,11 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 7D81D5D92A227FB2002869F7 /* Logon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logon.swift; sourceTree = ""; }; + 7D81D5DC2A228004002869F7 /* TextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldView.swift; sourceTree = ""; }; + 7D81D5DE2A2359A4002869F7 /* Greeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Greeting.swift; sourceTree = ""; }; 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; - 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; + 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingTwo.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -45,6 +51,21 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 7D81D5DB2A227FD6002869F7 /* Element */ = { + isa = PBXGroup; + children = ( + 7D81D5DC2A228004002869F7 /* TextFieldView.swift */, + ); + path = Element; + sourceTree = ""; + }; + 7DEB87872A1FE09500872D9A /* New Group */ = { + isa = PBXGroup; + children = ( + ); + path = "New Group"; + sourceTree = ""; + }; A8700DE62A1DDAD500D60253 = { isa = PBXGroup; children = ( @@ -64,14 +85,18 @@ A8700DF12A1DDAD500D60253 /* smartClass */ = { isa = PBXGroup; children = ( + 7D81D5DB2A227FD6002869F7 /* Element */, A8700E092A1DDC9D00D60253 /* Extension */, A8700E062A1DDC4900D60253 /* Modifiers */, A8700E032A1DDBFC00D60253 /* Info.plist */, A8700E002A1DDB6B00D60253 /* Fonts */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, + 7D81D5DE2A2359A4002869F7 /* Greeting.swift */, + 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */, + 7D81D5D92A227FB2002869F7 /* Logon.swift */, 7DEB87812A1FD08C00872D9A /* Registration.swift */, - 7DEB87852A1FDDF800872D9A /* SwiftUIView.swift */, + 7DEB87872A1FE09500872D9A /* New Group */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -183,10 +208,13 @@ buildActionMask = 2147483647; files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, - 7DEB87862A1FDDF800872D9A /* SwiftUIView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, + 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */, + 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */, + 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, + 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */, 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, ); @@ -326,7 +354,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -360,7 +388,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/smartClass/Assets.xcassets/Screen/Contents.json b/smartClass/Assets.xcassets/Screen/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json new file mode 100644 index 0000000..297eb4d --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "SecondStart.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg new file mode 100644 index 0000000..08fbe06 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json new file mode 100644 index 0000000..7acc41c --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StartScreen.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg new file mode 100644 index 0000000..791ced7 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json new file mode 100644 index 0000000..a1477e0 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "hello.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg new file mode 100644 index 0000000..361b209 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/ContentView.swift b/smartClass/ContentView.swift index ce69487..415d289 100644 --- a/smartClass/ContentView.swift +++ b/smartClass/ContentView.swift @@ -9,14 +9,9 @@ import SwiftUI struct ContentView: View { var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundColor(.accentColor) - Text("Hello, world!") - .customFont(font: FontManager.Nunito.black, size: 20) + NavigationStack{ + Greeting() } - .padding() } } diff --git a/smartClass/Element/TextFieldView.swift b/smartClass/Element/TextFieldView.swift new file mode 100644 index 0000000..f438fa1 --- /dev/null +++ b/smartClass/Element/TextFieldView.swift @@ -0,0 +1,26 @@ +// +// TextFieldView.swift +// smartClass +// +// Created by Владимир Ширяев on 27.05.2023. +// + +import SwiftUI + +struct TextFieldView: View { + @State var customStateProperty: String + var customText: String + + var body: some View { + VStack { + TextField(customText, text: $customStateProperty) + .frame(height: 52) + .padding(.horizontal,23) + .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) + .cornerRadius(10) + .font(.custom("Nunito-Regular", size: 16)) + } + .padding(.horizontal,20) + .padding(.bottom,18) + } +} diff --git a/smartClass/Greeting.swift b/smartClass/Greeting.swift new file mode 100644 index 0000000..1141cd9 --- /dev/null +++ b/smartClass/Greeting.swift @@ -0,0 +1,60 @@ +// +// Greeting.swift +// smartClass +// +// Created by Владимир Ширяев on 28.05.2023. +// + +import SwiftUI + +struct Greeting: View { + var body: some View { + ZStack{ + VStack{ + Image("StartScreen") + .frame(width: 400, height: 420) + .ignoresSafeArea() + Spacer() + } + ScrollView{ + Text("Добро пожаловать!") + .font(.custom("Nunito-Bold", size: 24)) + .padding(.top,40) + Text("Lorem Ipsum - это текст-\"рыба\", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной \"рыбой\" для текстов на латинице с начала XVI века. \n\nIpsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков.") + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + .padding(.horizontal,36) + .font(.custom("Nunito-Regular", size: 16)) + .padding(.top,10) + + NavigationLink { + GreetingTwo() + } label: { + Text("Продолжить") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.top,10) + .padding() + .padding(.bottom,24) + + } + .background(.white) + .cornerRadius(30) + .shadow(radius: 10) + .padding() + .ignoresSafeArea() + .offset(x:0, y:350) + .ignoresSafeArea() + } + .navigationBarBackButtonHidden(true) + } +} + +struct Greeting_Previews: PreviewProvider { + static var previews: some View { + Greeting() + } +} diff --git a/smartClass/GreetingTwo.swift b/smartClass/GreetingTwo.swift new file mode 100644 index 0000000..816c7b6 --- /dev/null +++ b/smartClass/GreetingTwo.swift @@ -0,0 +1,63 @@ +// +// GreetingTwo.swift +// smartClass +// +// Created by Владимир Ширяев on 28.05.2023. +// + +import SwiftUI + +struct GreetingTwo: View { + var body: some View { + VStack{ + ZStack{ + VStack{ + Image("SecondStart") + Spacer() + } + VStack{ + HStack{ + Text("SmartClass") + .font(.custom("Nunito-Bold", size: 36)) + Spacer() + } + .padding(.horizontal,20) + .padding(.top,40) + Spacer() + } + + } + NavigationLink{ + Logon() + } label: { + Text("Войти") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.horizontal, 20) + + NavigationLink { + Registration() + } label: { + Text("Регистрация") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(.black) + .cornerRadius(10) + } + .padding(.horizontal, 20) + + } + .navigationBarBackButtonHidden(true) + } +} + +struct GreetingTwo_Previews: PreviewProvider { + static var previews: some View { + GreetingTwo() + } +} diff --git a/smartClass/Logon.swift b/smartClass/Logon.swift new file mode 100644 index 0000000..29c0913 --- /dev/null +++ b/smartClass/Logon.swift @@ -0,0 +1,90 @@ +// +// Logon.swift +// smartClass +// +// Created by Владимир Ширяев on 27.05.2023. +// + +import SwiftUI + +struct Logon: View { + @Environment(\.dismiss) var dismiss + var body: some View { + ZStack{ + VStack{ + Image("hello") + .ignoresSafeArea() + Spacer() + } + VStack{ + HStack{ + Button{ + dismiss() + } label:{ + Image(systemName: "chevron.left") + .foregroundColor(.black) + .font(.custom("Nunito-Regular", size: 30)) + } + Text("Войти") + .padding(.horizontal, 10) + .font(.custom("Nunito-Bold", size: 30)) + Spacer() + } + .padding(.horizontal, 40) + Spacer() + } + ScrollView{ + EmailPasswordView() + + } + .background(.white) + .cornerRadius(30) + .shadow(radius: 10) + .padding() + .ignoresSafeArea() + .offset(x:0, y:350) + .ignoresSafeArea() + } + .navigationBarBackButtonHidden(true) + } +} + +struct Logon_Previews: PreviewProvider { + static var previews: some View { + Logon() + } +} + +struct EmailPasswordView: View { + @State private var emailState: String = "" + @State private var passwordState: String = "" + + var body: some View { + VStack{ + HStack{ + Text("Авторизация") + .font(.custom("Nunito-Bold", size: 20)) + Spacer() + } + .padding(.horizontal,39) + .padding(.top,50) + VStack{ + TextFieldView(customStateProperty: emailState, customText: "Email") + TextFieldView(customStateProperty: passwordState, customText: "Пароль") + + Button { + // + } label: { + Text("Войти") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.horizontal, 20) + .padding(.bottom,24) + } + } + } +} diff --git a/smartClass/Registration.swift b/smartClass/Registration.swift index c601b0f..4eb649c 100644 --- a/smartClass/Registration.swift +++ b/smartClass/Registration.swift @@ -8,8 +8,50 @@ import SwiftUI struct Registration: View { + @Environment(\.dismiss) var dismiss + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + ScrollView{ + VStack{ + HStack{ + Button{ + dismiss() + } label:{ + Image(systemName: "chevron.left") + .foregroundColor(.black) + .font(.custom("Nunito-Regular", size: 30)) + } + Text("Регистрация") + .padding(.horizontal, 10) + .font(.custom("Nunito-Bold", size: 30)) + Spacer() + } + .padding(.horizontal, 20) + Spacer() + } + EmailView() + .padding(.top,25) + .padding(.bottom,25) + PersonalityView() + .padding(.bottom,25) + UniversityView() + // .padding(.bottom,25) + + Button { + // + } label: { + Text("Далее") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.top,10) + .padding() + } + .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) + .navigationBarBackButtonHidden(true) } } @@ -18,3 +60,142 @@ struct Registration_Previews: PreviewProvider { Registration() } } + +struct EmailView: View { + @State private var emailState: String = "" + @State private var passwordState: String = "" + @State private var passwordTwoState: String = "" + + var body: some View { + VStack { + HStack{ + Text("Email и пароль") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + TextFieldView(customStateProperty: emailState, customText: "Email") + .padding(.top,45) + TextFieldView(customStateProperty: passwordState, customText: "Пароль") + TextFieldView(customStateProperty: passwordTwoState, customText: "Повторить пароль") + .padding(.bottom,27) + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} + + +struct PersonalityView: View { + @State private var surnameState: String = "" + @State private var firstNameState: String = "" + @State private var fatherNameState: String = "" + @State private var birthDate = Date.now + + + var body: some View { + VStack { + HStack{ + Text("Личные данные") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + TextFieldView(customStateProperty: surnameState, customText: "Фамилия") + .padding(.top,45) + TextFieldView(customStateProperty: firstNameState, customText: "Имя") + TextFieldView(customStateProperty: fatherNameState, customText: "Отчество") + + DatePicker(selection: $birthDate, in: ...Date.now, displayedComponents: .date) { + Text("Дата рождения") + .bold() + } + .environment(\.locale, Locale.init(identifier: "ru")) + .padding(.horizontal,20) + .padding(.bottom,27) + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} + + +struct UniversityView: View { + @State private var universityState: String = "" + @State private var specialtyState: String = "" + @State private var groupState: String = "" + @State private var courseState: String = "" + + var body: some View { + VStack { + HStack{ + Text("Университет и группа") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + VStack{ + HStack{ + Text("Выберите университет") + .bold() + Spacer() + } + .padding(.horizontal,29) + .padding(.top,45) + + TextFieldView(customStateProperty: universityState, customText: "Университет") + + } + + VStack{ + HStack{ + Text("Выберите специальность") + .bold() + Spacer() + } + .padding(.horizontal,29) + TextFieldView(customStateProperty: specialtyState, customText: "Специальность") + + } + HStack(spacing: 13){ + VStack{ + HStack{ + Text("Группа") + .bold() + Spacer() + } + .padding(.horizontal,29) + + TextFieldView(customStateProperty: groupState, customText: "") + //.frame(width: 188) + + } + VStack{ + HStack{ + Text("Курс") + .bold() + Spacer() + } + .padding(.horizontal,29) + + TextFieldView(customStateProperty: courseState, customText: "") + //.frame(width: 109) + + } + } + .padding(.bottom,27) + + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} diff --git a/smartClass/SwiftUIView.swift b/smartClass/SwiftUIView.swift deleted file mode 100644 index 47e455b..0000000 --- a/smartClass/SwiftUIView.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// SwiftUIView.swift -// smartClass -// -// Created by Владимир Ширяев on 25.05.2023. -// - -import SwiftUI - -struct SwiftUIView: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) - } -} - -struct SwiftUIView_Previews: PreviewProvider { - static var previews: some View { - SwiftUIView() - } -} From 8dbc3fc1f711a3c724700e5a4ee36b6f35491de0 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Tue, 30 May 2023 21:17:35 +0300 Subject: [PATCH 07/12] =?UTF-8?q?Revert=20"=D0=97=D0=B0=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20=D0=BD=D0=B0=20=D1=81=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20#5=20=D0=BE=D1=82=20iWalletTeam/=D1=80=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 5f9000fa3d1bda5a6875c5697d9b4ce96046d751, reversing changes made to 5ba765aa517b62bd5cf1e6e5e23bbc62488968fa. --- smartClass.xcodeproj/project.pbxproj | 40 +--- .../Assets.xcassets/Screen/Contents.json | 6 - .../Screen/SecondStart.imageset/Contents.json | 21 -- .../SecondStart.imageset/SecondStart.svg | 164 -------------- .../Screen/StartScreen.imageset/Contents.json | 21 -- .../StartScreen.imageset/StartScreen.svg | 56 ----- .../Screen/hello.imageset/Contents.json | 21 -- .../Screen/hello.imageset/hello.svg | 198 ----------------- smartClass/ContentView.swift | 9 +- smartClass/Element/TextFieldView.swift | 26 --- smartClass/Greeting.swift | 60 ------ smartClass/GreetingTwo.swift | 63 ------ smartClass/Logon.swift | 90 -------- smartClass/Registration.swift | 201 ------------------ 14 files changed, 9 insertions(+), 967 deletions(-) delete mode 100644 smartClass/Assets.xcassets/Screen/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg delete mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg delete mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg delete mode 100644 smartClass/Element/TextFieldView.swift delete mode 100644 smartClass/Greeting.swift delete mode 100644 smartClass/GreetingTwo.swift delete mode 100644 smartClass/Logon.swift delete mode 100644 smartClass/Registration.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 5ad1f38..16ead9d 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,11 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5D92A227FB2002869F7 /* Logon.swift */; }; - 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DC2A228004002869F7 /* TextFieldView.swift */; }; - 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DE2A2359A4002869F7 /* Greeting.swift */; }; - 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; - 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -23,11 +18,6 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 7D81D5D92A227FB2002869F7 /* Logon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logon.swift; sourceTree = ""; }; - 7D81D5DC2A228004002869F7 /* TextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldView.swift; sourceTree = ""; }; - 7D81D5DE2A2359A4002869F7 /* Greeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Greeting.swift; sourceTree = ""; }; - 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; - 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingTwo.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -51,21 +41,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 7D81D5DB2A227FD6002869F7 /* Element */ = { - isa = PBXGroup; - children = ( - 7D81D5DC2A228004002869F7 /* TextFieldView.swift */, - ); - path = Element; - sourceTree = ""; - }; - 7DEB87872A1FE09500872D9A /* New Group */ = { - isa = PBXGroup; - children = ( - ); - path = "New Group"; - sourceTree = ""; - }; A8700DE62A1DDAD500D60253 = { isa = PBXGroup; children = ( @@ -85,18 +60,12 @@ A8700DF12A1DDAD500D60253 /* smartClass */ = { isa = PBXGroup; children = ( - 7D81D5DB2A227FD6002869F7 /* Element */, A8700E092A1DDC9D00D60253 /* Extension */, A8700E062A1DDC4900D60253 /* Modifiers */, A8700E032A1DDBFC00D60253 /* Info.plist */, A8700E002A1DDB6B00D60253 /* Fonts */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, - 7D81D5DE2A2359A4002869F7 /* Greeting.swift */, - 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */, - 7D81D5D92A227FB2002869F7 /* Logon.swift */, - 7DEB87812A1FD08C00872D9A /* Registration.swift */, - 7DEB87872A1FE09500872D9A /* New Group */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -209,13 +178,8 @@ files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, - 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */, - 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */, - 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, - 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */, - 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -354,7 +318,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -388,7 +352,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/smartClass/Assets.xcassets/Screen/Contents.json b/smartClass/Assets.xcassets/Screen/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/smartClass/Assets.xcassets/Screen/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json deleted file mode 100644 index 297eb4d..0000000 --- a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "SecondStart.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg deleted file mode 100644 index 08fbe06..0000000 --- a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json deleted file mode 100644 index 7acc41c..0000000 --- a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "StartScreen.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg deleted file mode 100644 index 791ced7..0000000 --- a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json deleted file mode 100644 index a1477e0..0000000 --- a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "hello.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg deleted file mode 100644 index 361b209..0000000 --- a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/ContentView.swift b/smartClass/ContentView.swift index 415d289..ce69487 100644 --- a/smartClass/ContentView.swift +++ b/smartClass/ContentView.swift @@ -9,9 +9,14 @@ import SwiftUI struct ContentView: View { var body: some View { - NavigationStack{ - Greeting() + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + .customFont(font: FontManager.Nunito.black, size: 20) } + .padding() } } diff --git a/smartClass/Element/TextFieldView.swift b/smartClass/Element/TextFieldView.swift deleted file mode 100644 index f438fa1..0000000 --- a/smartClass/Element/TextFieldView.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// TextFieldView.swift -// smartClass -// -// Created by Владимир Ширяев on 27.05.2023. -// - -import SwiftUI - -struct TextFieldView: View { - @State var customStateProperty: String - var customText: String - - var body: some View { - VStack { - TextField(customText, text: $customStateProperty) - .frame(height: 52) - .padding(.horizontal,23) - .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) - .cornerRadius(10) - .font(.custom("Nunito-Regular", size: 16)) - } - .padding(.horizontal,20) - .padding(.bottom,18) - } -} diff --git a/smartClass/Greeting.swift b/smartClass/Greeting.swift deleted file mode 100644 index 1141cd9..0000000 --- a/smartClass/Greeting.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// Greeting.swift -// smartClass -// -// Created by Владимир Ширяев on 28.05.2023. -// - -import SwiftUI - -struct Greeting: View { - var body: some View { - ZStack{ - VStack{ - Image("StartScreen") - .frame(width: 400, height: 420) - .ignoresSafeArea() - Spacer() - } - ScrollView{ - Text("Добро пожаловать!") - .font(.custom("Nunito-Bold", size: 24)) - .padding(.top,40) - Text("Lorem Ipsum - это текст-\"рыба\", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной \"рыбой\" для текстов на латинице с начала XVI века. \n\nIpsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков.") - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - .padding(.horizontal,36) - .font(.custom("Nunito-Regular", size: 16)) - .padding(.top,10) - - NavigationLink { - GreetingTwo() - } label: { - Text("Продолжить") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.top,10) - .padding() - .padding(.bottom,24) - - } - .background(.white) - .cornerRadius(30) - .shadow(radius: 10) - .padding() - .ignoresSafeArea() - .offset(x:0, y:350) - .ignoresSafeArea() - } - .navigationBarBackButtonHidden(true) - } -} - -struct Greeting_Previews: PreviewProvider { - static var previews: some View { - Greeting() - } -} diff --git a/smartClass/GreetingTwo.swift b/smartClass/GreetingTwo.swift deleted file mode 100644 index 816c7b6..0000000 --- a/smartClass/GreetingTwo.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// GreetingTwo.swift -// smartClass -// -// Created by Владимир Ширяев on 28.05.2023. -// - -import SwiftUI - -struct GreetingTwo: View { - var body: some View { - VStack{ - ZStack{ - VStack{ - Image("SecondStart") - Spacer() - } - VStack{ - HStack{ - Text("SmartClass") - .font(.custom("Nunito-Bold", size: 36)) - Spacer() - } - .padding(.horizontal,20) - .padding(.top,40) - Spacer() - } - - } - NavigationLink{ - Logon() - } label: { - Text("Войти") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.horizontal, 20) - - NavigationLink { - Registration() - } label: { - Text("Регистрация") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(.black) - .cornerRadius(10) - } - .padding(.horizontal, 20) - - } - .navigationBarBackButtonHidden(true) - } -} - -struct GreetingTwo_Previews: PreviewProvider { - static var previews: some View { - GreetingTwo() - } -} diff --git a/smartClass/Logon.swift b/smartClass/Logon.swift deleted file mode 100644 index 29c0913..0000000 --- a/smartClass/Logon.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// Logon.swift -// smartClass -// -// Created by Владимир Ширяев on 27.05.2023. -// - -import SwiftUI - -struct Logon: View { - @Environment(\.dismiss) var dismiss - var body: some View { - ZStack{ - VStack{ - Image("hello") - .ignoresSafeArea() - Spacer() - } - VStack{ - HStack{ - Button{ - dismiss() - } label:{ - Image(systemName: "chevron.left") - .foregroundColor(.black) - .font(.custom("Nunito-Regular", size: 30)) - } - Text("Войти") - .padding(.horizontal, 10) - .font(.custom("Nunito-Bold", size: 30)) - Spacer() - } - .padding(.horizontal, 40) - Spacer() - } - ScrollView{ - EmailPasswordView() - - } - .background(.white) - .cornerRadius(30) - .shadow(radius: 10) - .padding() - .ignoresSafeArea() - .offset(x:0, y:350) - .ignoresSafeArea() - } - .navigationBarBackButtonHidden(true) - } -} - -struct Logon_Previews: PreviewProvider { - static var previews: some View { - Logon() - } -} - -struct EmailPasswordView: View { - @State private var emailState: String = "" - @State private var passwordState: String = "" - - var body: some View { - VStack{ - HStack{ - Text("Авторизация") - .font(.custom("Nunito-Bold", size: 20)) - Spacer() - } - .padding(.horizontal,39) - .padding(.top,50) - VStack{ - TextFieldView(customStateProperty: emailState, customText: "Email") - TextFieldView(customStateProperty: passwordState, customText: "Пароль") - - Button { - // - } label: { - Text("Войти") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.horizontal, 20) - .padding(.bottom,24) - } - } - } -} diff --git a/smartClass/Registration.swift b/smartClass/Registration.swift deleted file mode 100644 index 4eb649c..0000000 --- a/smartClass/Registration.swift +++ /dev/null @@ -1,201 +0,0 @@ -// -// Registration.swift -// smartClass -// -// Created by Владимир Ширяев on 25.05.2023. -// - -import SwiftUI - -struct Registration: View { - @Environment(\.dismiss) var dismiss - - var body: some View { - ScrollView{ - VStack{ - HStack{ - Button{ - dismiss() - } label:{ - Image(systemName: "chevron.left") - .foregroundColor(.black) - .font(.custom("Nunito-Regular", size: 30)) - } - Text("Регистрация") - .padding(.horizontal, 10) - .font(.custom("Nunito-Bold", size: 30)) - Spacer() - } - .padding(.horizontal, 20) - Spacer() - } - EmailView() - .padding(.top,25) - .padding(.bottom,25) - PersonalityView() - .padding(.bottom,25) - UniversityView() - // .padding(.bottom,25) - - Button { - // - } label: { - Text("Далее") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.top,10) - .padding() - } - .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) - .navigationBarBackButtonHidden(true) - } -} - -struct Registration_Previews: PreviewProvider { - static var previews: some View { - Registration() - } -} - -struct EmailView: View { - @State private var emailState: String = "" - @State private var passwordState: String = "" - @State private var passwordTwoState: String = "" - - var body: some View { - VStack { - HStack{ - Text("Email и пароль") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - TextFieldView(customStateProperty: emailState, customText: "Email") - .padding(.top,45) - TextFieldView(customStateProperty: passwordState, customText: "Пароль") - TextFieldView(customStateProperty: passwordTwoState, customText: "Повторить пароль") - .padding(.bottom,27) - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} - - -struct PersonalityView: View { - @State private var surnameState: String = "" - @State private var firstNameState: String = "" - @State private var fatherNameState: String = "" - @State private var birthDate = Date.now - - - var body: some View { - VStack { - HStack{ - Text("Личные данные") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - TextFieldView(customStateProperty: surnameState, customText: "Фамилия") - .padding(.top,45) - TextFieldView(customStateProperty: firstNameState, customText: "Имя") - TextFieldView(customStateProperty: fatherNameState, customText: "Отчество") - - DatePicker(selection: $birthDate, in: ...Date.now, displayedComponents: .date) { - Text("Дата рождения") - .bold() - } - .environment(\.locale, Locale.init(identifier: "ru")) - .padding(.horizontal,20) - .padding(.bottom,27) - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} - - -struct UniversityView: View { - @State private var universityState: String = "" - @State private var specialtyState: String = "" - @State private var groupState: String = "" - @State private var courseState: String = "" - - var body: some View { - VStack { - HStack{ - Text("Университет и группа") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - VStack{ - HStack{ - Text("Выберите университет") - .bold() - Spacer() - } - .padding(.horizontal,29) - .padding(.top,45) - - TextFieldView(customStateProperty: universityState, customText: "Университет") - - } - - VStack{ - HStack{ - Text("Выберите специальность") - .bold() - Spacer() - } - .padding(.horizontal,29) - TextFieldView(customStateProperty: specialtyState, customText: "Специальность") - - } - HStack(spacing: 13){ - VStack{ - HStack{ - Text("Группа") - .bold() - Spacer() - } - .padding(.horizontal,29) - - TextFieldView(customStateProperty: groupState, customText: "") - //.frame(width: 188) - - } - VStack{ - HStack{ - Text("Курс") - .bold() - Spacer() - } - .padding(.horizontal,29) - - TextFieldView(customStateProperty: courseState, customText: "") - //.frame(width: 109) - - } - } - .padding(.bottom,27) - - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} From 6d4801aea20adf7a550db3ad994f4dc4f8d4fbe0 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Tue, 30 May 2023 21:18:38 +0300 Subject: [PATCH 08/12] =?UTF-8?q?Revert=20"Revert=20"=D0=97=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=20=D0=BD=D0=B0=20=D1=81=D0=BB=D0=B8=D1=8F?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20#5=20=D0=BE=D1=82=20iWalletTeam/=D1=80?= =?UTF-8?q?=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 8dbc3fc1f711a3c724700e5a4ee36b6f35491de0. --- smartClass.xcodeproj/project.pbxproj | 40 +++- .../Assets.xcassets/Screen/Contents.json | 6 + .../Screen/SecondStart.imageset/Contents.json | 21 ++ .../SecondStart.imageset/SecondStart.svg | 164 ++++++++++++++ .../Screen/StartScreen.imageset/Contents.json | 21 ++ .../StartScreen.imageset/StartScreen.svg | 56 +++++ .../Screen/hello.imageset/Contents.json | 21 ++ .../Screen/hello.imageset/hello.svg | 198 +++++++++++++++++ smartClass/ContentView.swift | 9 +- smartClass/Element/TextFieldView.swift | 26 +++ smartClass/Greeting.swift | 60 ++++++ smartClass/GreetingTwo.swift | 63 ++++++ smartClass/Logon.swift | 90 ++++++++ smartClass/Registration.swift | 201 ++++++++++++++++++ 14 files changed, 967 insertions(+), 9 deletions(-) create mode 100644 smartClass/Assets.xcassets/Screen/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg create mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg create mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg create mode 100644 smartClass/Element/TextFieldView.swift create mode 100644 smartClass/Greeting.swift create mode 100644 smartClass/GreetingTwo.swift create mode 100644 smartClass/Logon.swift create mode 100644 smartClass/Registration.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 16ead9d..5ad1f38 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5D92A227FB2002869F7 /* Logon.swift */; }; + 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DC2A228004002869F7 /* TextFieldView.swift */; }; + 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DE2A2359A4002869F7 /* Greeting.swift */; }; + 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; + 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -18,6 +23,11 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 7D81D5D92A227FB2002869F7 /* Logon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logon.swift; sourceTree = ""; }; + 7D81D5DC2A228004002869F7 /* TextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldView.swift; sourceTree = ""; }; + 7D81D5DE2A2359A4002869F7 /* Greeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Greeting.swift; sourceTree = ""; }; + 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; + 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingTwo.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -41,6 +51,21 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 7D81D5DB2A227FD6002869F7 /* Element */ = { + isa = PBXGroup; + children = ( + 7D81D5DC2A228004002869F7 /* TextFieldView.swift */, + ); + path = Element; + sourceTree = ""; + }; + 7DEB87872A1FE09500872D9A /* New Group */ = { + isa = PBXGroup; + children = ( + ); + path = "New Group"; + sourceTree = ""; + }; A8700DE62A1DDAD500D60253 = { isa = PBXGroup; children = ( @@ -60,12 +85,18 @@ A8700DF12A1DDAD500D60253 /* smartClass */ = { isa = PBXGroup; children = ( + 7D81D5DB2A227FD6002869F7 /* Element */, A8700E092A1DDC9D00D60253 /* Extension */, A8700E062A1DDC4900D60253 /* Modifiers */, A8700E032A1DDBFC00D60253 /* Info.plist */, A8700E002A1DDB6B00D60253 /* Fonts */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, + 7D81D5DE2A2359A4002869F7 /* Greeting.swift */, + 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */, + 7D81D5D92A227FB2002869F7 /* Logon.swift */, + 7DEB87812A1FD08C00872D9A /* Registration.swift */, + 7DEB87872A1FE09500872D9A /* New Group */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -178,8 +209,13 @@ files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, + 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */, + 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */, + 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, + 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */, + 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -318,7 +354,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -352,7 +388,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/smartClass/Assets.xcassets/Screen/Contents.json b/smartClass/Assets.xcassets/Screen/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json new file mode 100644 index 0000000..297eb4d --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "SecondStart.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg new file mode 100644 index 0000000..08fbe06 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json new file mode 100644 index 0000000..7acc41c --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StartScreen.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg new file mode 100644 index 0000000..791ced7 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json new file mode 100644 index 0000000..a1477e0 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "hello.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg new file mode 100644 index 0000000..361b209 --- /dev/null +++ b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/ContentView.swift b/smartClass/ContentView.swift index ce69487..415d289 100644 --- a/smartClass/ContentView.swift +++ b/smartClass/ContentView.swift @@ -9,14 +9,9 @@ import SwiftUI struct ContentView: View { var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundColor(.accentColor) - Text("Hello, world!") - .customFont(font: FontManager.Nunito.black, size: 20) + NavigationStack{ + Greeting() } - .padding() } } diff --git a/smartClass/Element/TextFieldView.swift b/smartClass/Element/TextFieldView.swift new file mode 100644 index 0000000..f438fa1 --- /dev/null +++ b/smartClass/Element/TextFieldView.swift @@ -0,0 +1,26 @@ +// +// TextFieldView.swift +// smartClass +// +// Created by Владимир Ширяев on 27.05.2023. +// + +import SwiftUI + +struct TextFieldView: View { + @State var customStateProperty: String + var customText: String + + var body: some View { + VStack { + TextField(customText, text: $customStateProperty) + .frame(height: 52) + .padding(.horizontal,23) + .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) + .cornerRadius(10) + .font(.custom("Nunito-Regular", size: 16)) + } + .padding(.horizontal,20) + .padding(.bottom,18) + } +} diff --git a/smartClass/Greeting.swift b/smartClass/Greeting.swift new file mode 100644 index 0000000..1141cd9 --- /dev/null +++ b/smartClass/Greeting.swift @@ -0,0 +1,60 @@ +// +// Greeting.swift +// smartClass +// +// Created by Владимир Ширяев on 28.05.2023. +// + +import SwiftUI + +struct Greeting: View { + var body: some View { + ZStack{ + VStack{ + Image("StartScreen") + .frame(width: 400, height: 420) + .ignoresSafeArea() + Spacer() + } + ScrollView{ + Text("Добро пожаловать!") + .font(.custom("Nunito-Bold", size: 24)) + .padding(.top,40) + Text("Lorem Ipsum - это текст-\"рыба\", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной \"рыбой\" для текстов на латинице с начала XVI века. \n\nIpsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков.") + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + .padding(.horizontal,36) + .font(.custom("Nunito-Regular", size: 16)) + .padding(.top,10) + + NavigationLink { + GreetingTwo() + } label: { + Text("Продолжить") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.top,10) + .padding() + .padding(.bottom,24) + + } + .background(.white) + .cornerRadius(30) + .shadow(radius: 10) + .padding() + .ignoresSafeArea() + .offset(x:0, y:350) + .ignoresSafeArea() + } + .navigationBarBackButtonHidden(true) + } +} + +struct Greeting_Previews: PreviewProvider { + static var previews: some View { + Greeting() + } +} diff --git a/smartClass/GreetingTwo.swift b/smartClass/GreetingTwo.swift new file mode 100644 index 0000000..816c7b6 --- /dev/null +++ b/smartClass/GreetingTwo.swift @@ -0,0 +1,63 @@ +// +// GreetingTwo.swift +// smartClass +// +// Created by Владимир Ширяев on 28.05.2023. +// + +import SwiftUI + +struct GreetingTwo: View { + var body: some View { + VStack{ + ZStack{ + VStack{ + Image("SecondStart") + Spacer() + } + VStack{ + HStack{ + Text("SmartClass") + .font(.custom("Nunito-Bold", size: 36)) + Spacer() + } + .padding(.horizontal,20) + .padding(.top,40) + Spacer() + } + + } + NavigationLink{ + Logon() + } label: { + Text("Войти") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.horizontal, 20) + + NavigationLink { + Registration() + } label: { + Text("Регистрация") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(.black) + .cornerRadius(10) + } + .padding(.horizontal, 20) + + } + .navigationBarBackButtonHidden(true) + } +} + +struct GreetingTwo_Previews: PreviewProvider { + static var previews: some View { + GreetingTwo() + } +} diff --git a/smartClass/Logon.swift b/smartClass/Logon.swift new file mode 100644 index 0000000..29c0913 --- /dev/null +++ b/smartClass/Logon.swift @@ -0,0 +1,90 @@ +// +// Logon.swift +// smartClass +// +// Created by Владимир Ширяев on 27.05.2023. +// + +import SwiftUI + +struct Logon: View { + @Environment(\.dismiss) var dismiss + var body: some View { + ZStack{ + VStack{ + Image("hello") + .ignoresSafeArea() + Spacer() + } + VStack{ + HStack{ + Button{ + dismiss() + } label:{ + Image(systemName: "chevron.left") + .foregroundColor(.black) + .font(.custom("Nunito-Regular", size: 30)) + } + Text("Войти") + .padding(.horizontal, 10) + .font(.custom("Nunito-Bold", size: 30)) + Spacer() + } + .padding(.horizontal, 40) + Spacer() + } + ScrollView{ + EmailPasswordView() + + } + .background(.white) + .cornerRadius(30) + .shadow(radius: 10) + .padding() + .ignoresSafeArea() + .offset(x:0, y:350) + .ignoresSafeArea() + } + .navigationBarBackButtonHidden(true) + } +} + +struct Logon_Previews: PreviewProvider { + static var previews: some View { + Logon() + } +} + +struct EmailPasswordView: View { + @State private var emailState: String = "" + @State private var passwordState: String = "" + + var body: some View { + VStack{ + HStack{ + Text("Авторизация") + .font(.custom("Nunito-Bold", size: 20)) + Spacer() + } + .padding(.horizontal,39) + .padding(.top,50) + VStack{ + TextFieldView(customStateProperty: emailState, customText: "Email") + TextFieldView(customStateProperty: passwordState, customText: "Пароль") + + Button { + // + } label: { + Text("Войти") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.horizontal, 20) + .padding(.bottom,24) + } + } + } +} diff --git a/smartClass/Registration.swift b/smartClass/Registration.swift new file mode 100644 index 0000000..4eb649c --- /dev/null +++ b/smartClass/Registration.swift @@ -0,0 +1,201 @@ +// +// Registration.swift +// smartClass +// +// Created by Владимир Ширяев on 25.05.2023. +// + +import SwiftUI + +struct Registration: View { + @Environment(\.dismiss) var dismiss + + var body: some View { + ScrollView{ + VStack{ + HStack{ + Button{ + dismiss() + } label:{ + Image(systemName: "chevron.left") + .foregroundColor(.black) + .font(.custom("Nunito-Regular", size: 30)) + } + Text("Регистрация") + .padding(.horizontal, 10) + .font(.custom("Nunito-Bold", size: 30)) + Spacer() + } + .padding(.horizontal, 20) + Spacer() + } + EmailView() + .padding(.top,25) + .padding(.bottom,25) + PersonalityView() + .padding(.bottom,25) + UniversityView() + // .padding(.bottom,25) + + Button { + // + } label: { + Text("Далее") + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .frame(height: 52) + .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) + .cornerRadius(10) + } + .padding(.top,10) + .padding() + } + .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) + .navigationBarBackButtonHidden(true) + } +} + +struct Registration_Previews: PreviewProvider { + static var previews: some View { + Registration() + } +} + +struct EmailView: View { + @State private var emailState: String = "" + @State private var passwordState: String = "" + @State private var passwordTwoState: String = "" + + var body: some View { + VStack { + HStack{ + Text("Email и пароль") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + TextFieldView(customStateProperty: emailState, customText: "Email") + .padding(.top,45) + TextFieldView(customStateProperty: passwordState, customText: "Пароль") + TextFieldView(customStateProperty: passwordTwoState, customText: "Повторить пароль") + .padding(.bottom,27) + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} + + +struct PersonalityView: View { + @State private var surnameState: String = "" + @State private var firstNameState: String = "" + @State private var fatherNameState: String = "" + @State private var birthDate = Date.now + + + var body: some View { + VStack { + HStack{ + Text("Личные данные") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + TextFieldView(customStateProperty: surnameState, customText: "Фамилия") + .padding(.top,45) + TextFieldView(customStateProperty: firstNameState, customText: "Имя") + TextFieldView(customStateProperty: fatherNameState, customText: "Отчество") + + DatePicker(selection: $birthDate, in: ...Date.now, displayedComponents: .date) { + Text("Дата рождения") + .bold() + } + .environment(\.locale, Locale.init(identifier: "ru")) + .padding(.horizontal,20) + .padding(.bottom,27) + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} + + +struct UniversityView: View { + @State private var universityState: String = "" + @State private var specialtyState: String = "" + @State private var groupState: String = "" + @State private var courseState: String = "" + + var body: some View { + VStack { + HStack{ + Text("Университет и группа") + .padding(.horizontal,19) + .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) + Spacer() + } + VStack{ + VStack{ + HStack{ + Text("Выберите университет") + .bold() + Spacer() + } + .padding(.horizontal,29) + .padding(.top,45) + + TextFieldView(customStateProperty: universityState, customText: "Университет") + + } + + VStack{ + HStack{ + Text("Выберите специальность") + .bold() + Spacer() + } + .padding(.horizontal,29) + TextFieldView(customStateProperty: specialtyState, customText: "Специальность") + + } + HStack(spacing: 13){ + VStack{ + HStack{ + Text("Группа") + .bold() + Spacer() + } + .padding(.horizontal,29) + + TextFieldView(customStateProperty: groupState, customText: "") + //.frame(width: 188) + + } + VStack{ + HStack{ + Text("Курс") + .bold() + Spacer() + } + .padding(.horizontal,29) + + TextFieldView(customStateProperty: courseState, customText: "") + //.frame(width: 109) + + } + } + .padding(.bottom,27) + + } + .background(.white) + .cornerRadius(30) + } + .padding(.horizontal,20) + } +} From 1abb49441daa30aba8ddd6c00c1dd16fa84ebe48 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Tue, 30 May 2023 21:21:11 +0300 Subject: [PATCH 09/12] =?UTF-8?q?Revert=20"=D0=97=D0=B0=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20=D0=BD=D0=B0=20=D1=81=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20#5=20=D0=BE=D1=82=20iWalletTeam/=D1=80=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8=D1=8F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 5f9000fa3d1bda5a6875c5697d9b4ce96046d751, reversing changes made to 5ba765aa517b62bd5cf1e6e5e23bbc62488968fa. --- smartClass.xcodeproj/project.pbxproj | 40 +--- .../Assets.xcassets/Screen/Contents.json | 6 - .../Screen/SecondStart.imageset/Contents.json | 21 -- .../SecondStart.imageset/SecondStart.svg | 164 -------------- .../Screen/StartScreen.imageset/Contents.json | 21 -- .../StartScreen.imageset/StartScreen.svg | 56 ----- .../Screen/hello.imageset/Contents.json | 21 -- .../Screen/hello.imageset/hello.svg | 198 ----------------- smartClass/ContentView.swift | 9 +- smartClass/Element/TextFieldView.swift | 26 --- smartClass/Greeting.swift | 60 ------ smartClass/GreetingTwo.swift | 63 ------ smartClass/Logon.swift | 90 -------- smartClass/Registration.swift | 201 ------------------ 14 files changed, 9 insertions(+), 967 deletions(-) delete mode 100644 smartClass/Assets.xcassets/Screen/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg delete mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg delete mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json delete mode 100644 smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg delete mode 100644 smartClass/Element/TextFieldView.swift delete mode 100644 smartClass/Greeting.swift delete mode 100644 smartClass/GreetingTwo.swift delete mode 100644 smartClass/Logon.swift delete mode 100644 smartClass/Registration.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 5ad1f38..16ead9d 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,11 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5D92A227FB2002869F7 /* Logon.swift */; }; - 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DC2A228004002869F7 /* TextFieldView.swift */; }; - 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D81D5DE2A2359A4002869F7 /* Greeting.swift */; }; - 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DEB87812A1FD08C00872D9A /* Registration.swift */; }; - 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -23,11 +18,6 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 7D81D5D92A227FB2002869F7 /* Logon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logon.swift; sourceTree = ""; }; - 7D81D5DC2A228004002869F7 /* TextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldView.swift; sourceTree = ""; }; - 7D81D5DE2A2359A4002869F7 /* Greeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Greeting.swift; sourceTree = ""; }; - 7DEB87812A1FD08C00872D9A /* Registration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Registration.swift; sourceTree = ""; }; - 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingTwo.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -51,21 +41,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 7D81D5DB2A227FD6002869F7 /* Element */ = { - isa = PBXGroup; - children = ( - 7D81D5DC2A228004002869F7 /* TextFieldView.swift */, - ); - path = Element; - sourceTree = ""; - }; - 7DEB87872A1FE09500872D9A /* New Group */ = { - isa = PBXGroup; - children = ( - ); - path = "New Group"; - sourceTree = ""; - }; A8700DE62A1DDAD500D60253 = { isa = PBXGroup; children = ( @@ -85,18 +60,12 @@ A8700DF12A1DDAD500D60253 /* smartClass */ = { isa = PBXGroup; children = ( - 7D81D5DB2A227FD6002869F7 /* Element */, A8700E092A1DDC9D00D60253 /* Extension */, A8700E062A1DDC4900D60253 /* Modifiers */, A8700E032A1DDBFC00D60253 /* Info.plist */, A8700E002A1DDB6B00D60253 /* Fonts */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF42A1DDAD500D60253 /* ContentView.swift */, - 7D81D5DE2A2359A4002869F7 /* Greeting.swift */, - 7DF024D42A238CCC00EB5D12 /* GreetingTwo.swift */, - 7D81D5D92A227FB2002869F7 /* Logon.swift */, - 7DEB87812A1FD08C00872D9A /* Registration.swift */, - 7DEB87872A1FE09500872D9A /* New Group */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -209,13 +178,8 @@ files = ( A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, - 7D81D5DD2A228004002869F7 /* TextFieldView.swift in Sources */, - 7DF024D52A238CCC00EB5D12 /* GreetingTwo.swift in Sources */, - 7D81D5DA2A227FB2002869F7 /* Logon.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, - 7D81D5DF2A2359A4002869F7 /* Greeting.swift in Sources */, - 7DEB87822A1FD08C00872D9A /* Registration.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -354,7 +318,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -388,7 +352,7 @@ INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 16.2; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/smartClass/Assets.xcassets/Screen/Contents.json b/smartClass/Assets.xcassets/Screen/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/smartClass/Assets.xcassets/Screen/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json deleted file mode 100644 index 297eb4d..0000000 --- a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "SecondStart.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg b/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg deleted file mode 100644 index 08fbe06..0000000 --- a/smartClass/Assets.xcassets/Screen/SecondStart.imageset/SecondStart.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json deleted file mode 100644 index 7acc41c..0000000 --- a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "StartScreen.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg b/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg deleted file mode 100644 index 791ced7..0000000 --- a/smartClass/Assets.xcassets/Screen/StartScreen.imageset/StartScreen.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json b/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json deleted file mode 100644 index a1477e0..0000000 --- a/smartClass/Assets.xcassets/Screen/hello.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "hello.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg b/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg deleted file mode 100644 index 361b209..0000000 --- a/smartClass/Assets.xcassets/Screen/hello.imageset/hello.svg +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/smartClass/ContentView.swift b/smartClass/ContentView.swift index 415d289..ce69487 100644 --- a/smartClass/ContentView.swift +++ b/smartClass/ContentView.swift @@ -9,9 +9,14 @@ import SwiftUI struct ContentView: View { var body: some View { - NavigationStack{ - Greeting() + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + .customFont(font: FontManager.Nunito.black, size: 20) } + .padding() } } diff --git a/smartClass/Element/TextFieldView.swift b/smartClass/Element/TextFieldView.swift deleted file mode 100644 index f438fa1..0000000 --- a/smartClass/Element/TextFieldView.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// TextFieldView.swift -// smartClass -// -// Created by Владимир Ширяев on 27.05.2023. -// - -import SwiftUI - -struct TextFieldView: View { - @State var customStateProperty: String - var customText: String - - var body: some View { - VStack { - TextField(customText, text: $customStateProperty) - .frame(height: 52) - .padding(.horizontal,23) - .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) - .cornerRadius(10) - .font(.custom("Nunito-Regular", size: 16)) - } - .padding(.horizontal,20) - .padding(.bottom,18) - } -} diff --git a/smartClass/Greeting.swift b/smartClass/Greeting.swift deleted file mode 100644 index 1141cd9..0000000 --- a/smartClass/Greeting.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// Greeting.swift -// smartClass -// -// Created by Владимир Ширяев on 28.05.2023. -// - -import SwiftUI - -struct Greeting: View { - var body: some View { - ZStack{ - VStack{ - Image("StartScreen") - .frame(width: 400, height: 420) - .ignoresSafeArea() - Spacer() - } - ScrollView{ - Text("Добро пожаловать!") - .font(.custom("Nunito-Bold", size: 24)) - .padding(.top,40) - Text("Lorem Ipsum - это текст-\"рыба\", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной \"рыбой\" для текстов на латинице с начала XVI века. \n\nIpsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков.") - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - .padding(.horizontal,36) - .font(.custom("Nunito-Regular", size: 16)) - .padding(.top,10) - - NavigationLink { - GreetingTwo() - } label: { - Text("Продолжить") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.top,10) - .padding() - .padding(.bottom,24) - - } - .background(.white) - .cornerRadius(30) - .shadow(radius: 10) - .padding() - .ignoresSafeArea() - .offset(x:0, y:350) - .ignoresSafeArea() - } - .navigationBarBackButtonHidden(true) - } -} - -struct Greeting_Previews: PreviewProvider { - static var previews: some View { - Greeting() - } -} diff --git a/smartClass/GreetingTwo.swift b/smartClass/GreetingTwo.swift deleted file mode 100644 index 816c7b6..0000000 --- a/smartClass/GreetingTwo.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// GreetingTwo.swift -// smartClass -// -// Created by Владимир Ширяев on 28.05.2023. -// - -import SwiftUI - -struct GreetingTwo: View { - var body: some View { - VStack{ - ZStack{ - VStack{ - Image("SecondStart") - Spacer() - } - VStack{ - HStack{ - Text("SmartClass") - .font(.custom("Nunito-Bold", size: 36)) - Spacer() - } - .padding(.horizontal,20) - .padding(.top,40) - Spacer() - } - - } - NavigationLink{ - Logon() - } label: { - Text("Войти") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.horizontal, 20) - - NavigationLink { - Registration() - } label: { - Text("Регистрация") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(.black) - .cornerRadius(10) - } - .padding(.horizontal, 20) - - } - .navigationBarBackButtonHidden(true) - } -} - -struct GreetingTwo_Previews: PreviewProvider { - static var previews: some View { - GreetingTwo() - } -} diff --git a/smartClass/Logon.swift b/smartClass/Logon.swift deleted file mode 100644 index 29c0913..0000000 --- a/smartClass/Logon.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// Logon.swift -// smartClass -// -// Created by Владимир Ширяев on 27.05.2023. -// - -import SwiftUI - -struct Logon: View { - @Environment(\.dismiss) var dismiss - var body: some View { - ZStack{ - VStack{ - Image("hello") - .ignoresSafeArea() - Spacer() - } - VStack{ - HStack{ - Button{ - dismiss() - } label:{ - Image(systemName: "chevron.left") - .foregroundColor(.black) - .font(.custom("Nunito-Regular", size: 30)) - } - Text("Войти") - .padding(.horizontal, 10) - .font(.custom("Nunito-Bold", size: 30)) - Spacer() - } - .padding(.horizontal, 40) - Spacer() - } - ScrollView{ - EmailPasswordView() - - } - .background(.white) - .cornerRadius(30) - .shadow(radius: 10) - .padding() - .ignoresSafeArea() - .offset(x:0, y:350) - .ignoresSafeArea() - } - .navigationBarBackButtonHidden(true) - } -} - -struct Logon_Previews: PreviewProvider { - static var previews: some View { - Logon() - } -} - -struct EmailPasswordView: View { - @State private var emailState: String = "" - @State private var passwordState: String = "" - - var body: some View { - VStack{ - HStack{ - Text("Авторизация") - .font(.custom("Nunito-Bold", size: 20)) - Spacer() - } - .padding(.horizontal,39) - .padding(.top,50) - VStack{ - TextFieldView(customStateProperty: emailState, customText: "Email") - TextFieldView(customStateProperty: passwordState, customText: "Пароль") - - Button { - // - } label: { - Text("Войти") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.horizontal, 20) - .padding(.bottom,24) - } - } - } -} diff --git a/smartClass/Registration.swift b/smartClass/Registration.swift deleted file mode 100644 index 4eb649c..0000000 --- a/smartClass/Registration.swift +++ /dev/null @@ -1,201 +0,0 @@ -// -// Registration.swift -// smartClass -// -// Created by Владимир Ширяев on 25.05.2023. -// - -import SwiftUI - -struct Registration: View { - @Environment(\.dismiss) var dismiss - - var body: some View { - ScrollView{ - VStack{ - HStack{ - Button{ - dismiss() - } label:{ - Image(systemName: "chevron.left") - .foregroundColor(.black) - .font(.custom("Nunito-Regular", size: 30)) - } - Text("Регистрация") - .padding(.horizontal, 10) - .font(.custom("Nunito-Bold", size: 30)) - Spacer() - } - .padding(.horizontal, 20) - Spacer() - } - EmailView() - .padding(.top,25) - .padding(.bottom,25) - PersonalityView() - .padding(.bottom,25) - UniversityView() - // .padding(.bottom,25) - - Button { - // - } label: { - Text("Далее") - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .frame(height: 52) - .background(Color(UIColor(red: 0.149, green: 0.431, blue: 0.945, alpha: 1))) - .cornerRadius(10) - } - .padding(.top,10) - .padding() - } - .background(Color(UIColor(red: 0.958, green: 0.958, blue: 0.958, alpha: 1))) - .navigationBarBackButtonHidden(true) - } -} - -struct Registration_Previews: PreviewProvider { - static var previews: some View { - Registration() - } -} - -struct EmailView: View { - @State private var emailState: String = "" - @State private var passwordState: String = "" - @State private var passwordTwoState: String = "" - - var body: some View { - VStack { - HStack{ - Text("Email и пароль") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - TextFieldView(customStateProperty: emailState, customText: "Email") - .padding(.top,45) - TextFieldView(customStateProperty: passwordState, customText: "Пароль") - TextFieldView(customStateProperty: passwordTwoState, customText: "Повторить пароль") - .padding(.bottom,27) - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} - - -struct PersonalityView: View { - @State private var surnameState: String = "" - @State private var firstNameState: String = "" - @State private var fatherNameState: String = "" - @State private var birthDate = Date.now - - - var body: some View { - VStack { - HStack{ - Text("Личные данные") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - TextFieldView(customStateProperty: surnameState, customText: "Фамилия") - .padding(.top,45) - TextFieldView(customStateProperty: firstNameState, customText: "Имя") - TextFieldView(customStateProperty: fatherNameState, customText: "Отчество") - - DatePicker(selection: $birthDate, in: ...Date.now, displayedComponents: .date) { - Text("Дата рождения") - .bold() - } - .environment(\.locale, Locale.init(identifier: "ru")) - .padding(.horizontal,20) - .padding(.bottom,27) - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} - - -struct UniversityView: View { - @State private var universityState: String = "" - @State private var specialtyState: String = "" - @State private var groupState: String = "" - @State private var courseState: String = "" - - var body: some View { - VStack { - HStack{ - Text("Университет и группа") - .padding(.horizontal,19) - .foregroundColor(Color(UIColor(red: 0.629, green: 0.629, blue: 0.629, alpha: 1))) - Spacer() - } - VStack{ - VStack{ - HStack{ - Text("Выберите университет") - .bold() - Spacer() - } - .padding(.horizontal,29) - .padding(.top,45) - - TextFieldView(customStateProperty: universityState, customText: "Университет") - - } - - VStack{ - HStack{ - Text("Выберите специальность") - .bold() - Spacer() - } - .padding(.horizontal,29) - TextFieldView(customStateProperty: specialtyState, customText: "Специальность") - - } - HStack(spacing: 13){ - VStack{ - HStack{ - Text("Группа") - .bold() - Spacer() - } - .padding(.horizontal,29) - - TextFieldView(customStateProperty: groupState, customText: "") - //.frame(width: 188) - - } - VStack{ - HStack{ - Text("Курс") - .bold() - Spacer() - } - .padding(.horizontal,29) - - TextFieldView(customStateProperty: courseState, customText: "") - //.frame(width: 109) - - } - } - .padding(.bottom,27) - - } - .background(.white) - .cornerRadius(30) - } - .padding(.horizontal,20) - } -} From b1f7343e8322e5bb9fc12d872fdb152b7c7a6e1f Mon Sep 17 00:00:00 2001 From: rwrun Date: Tue, 13 Jun 2023 16:01:38 +0500 Subject: [PATCH 10/12] =?UTF-8?q?=D0=92=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BC?= =?UTF-8?q?=20=D0=B2=D1=81=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=81=20=D0=9A=D0=BE=D0=B4=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D1=8E=20=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=BE?= =?UTF-8?q?=D0=B5=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB,=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B8=D1=81=D1=82=D1=83=D0=BF?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BA=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE?= =?UTF-8?q?=D0=BD=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B7=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 234 +++++++++++++++++- smartClass/Assets.xcassets/.DS_Store | Bin 0 -> 10244 bytes .../Red.colorset/Contents.json | 38 +++ .../SecondStart.imageset/Contents.json | 21 ++ .../SecondStart.imageset/SecondStart.svg | 164 ++++++++++++ .../StartScreen.imageset/Contents.json | 21 ++ .../StartScreen.imageset/StartScreen.svg | 56 +++++ .../Contents.json | 20 ++ .../BlueColor.colorset/Contents.json | 20 ++ .../Contents.json | 20 ++ .../Timetable colors/Contents.json | 6 + .../TextGrayColor.colorset/Contents.json | 20 ++ .../Timetable icons/Contents.json | 6 + .../arrowIconRight.imageset/Contents.json | 12 + .../arrowIconRight.imageset/image 14.png | Bin 0 -> 2600 bytes .../audienceIcon.imageset/Contents.json | 12 + .../audienceIcon.imageset/image 16.png | Bin 0 -> 19099 bytes .../buildingIcon.imageset/Contents.json | 12 + .../buildingIcon.imageset/image 15-2.png | Bin 0 -> 7977 bytes .../locationIcon.imageset/Contents.json | 21 ++ .../locationIcon.imageset/Group 107.png | Bin 0 -> 24966 bytes .../redRectangleIcon.imageset/Contents.json | 12 + .../Rectangle 113.png | Bin 0 -> 8631 bytes .../hello.imageset/Contents.json | 21 ++ .../Assets.xcassets/hello.imageset/hello.svg | 198 +++++++++++++++ .../iconCalendar.imageset/Contents.json | 21 ++ .../iconCalendar.imageset/iconCalendar.png | Bin 0 -> 3669 bytes .../iconClock.imageset/Contents.json | 21 ++ .../iconClock.imageset/iconClock.png | Bin 0 -> 2082 bytes .../iconProfile.imageset/Contents.json | 21 ++ .../iconProfile.imageset/iconProfile.png | Bin 0 -> 2910 bytes .../iconTabCalendar.imageset/Contents.json | 21 ++ .../iconTapCalendar.png | Bin 0 -> 4169 bytes .../iconTabClock.imageset/Contents.json | 21 ++ .../iconTabClock.imageset/iconTapClock.png | Bin 0 -> 2268 bytes .../iconTabProfile.imageset/Contents.json | 21 ++ .../iconTapProfile.png | Bin 0 -> 3218 bytes smartClass/Extension/Color.ext.swift | 19 ++ smartClass/Extension/Date.ext.swift | 58 +++++ smartClass/Extension/View.ext.swift | 60 +++++ smartClass/Model/Messages/MessageModel.swift | 30 +++ smartClass/Model/TabBar/TabBarModel.swift | 21 ++ smartClass/Resources/Colors.swift | 14 ++ smartClass/Resources/Icons.swift | 17 ++ .../Calendar/Calendar View/CalendarView.swift | 177 +++++++++++++ .../Student/Calendar/CalendarTabView.swift | 39 +++ .../App/Student/Calendar/TimetableCard.swift | 74 ++++++ .../Student/Calendar/TimetableCardView.swift | 107 ++++++++ .../Student/Messages/MessageItemView.swift | 36 +++ .../App/Student/Messages/MessagesView.swift | 60 +++++ .../View/App/Student/Profile/LessonView.swift | 50 ++++ .../App/Student/Profile/ProfileView.swift | 68 +++++ .../Profile/SettingTextFieldView.swift | 52 ++++ .../App/Student/Profile/SettingView.swift | 45 ++++ .../View/App/Student/StudentAppView.swift | 87 +++++++ smartClass/{ => View}/ContentView.swift | 9 +- smartClass/View/Login/GreetingTwoView.swift | 63 +++++ smartClass/View/Login/GreetingView.swift | 62 +++++ smartClass/View/Login/LoginView.swift | 93 +++++++ .../View/Login/Parts/TextFieldView.swift | 25 ++ smartClass/View/Login/RegistrationView.swift | 187 ++++++++++++++ smartClass/View/Parts/ButtonView.swift | 21 ++ smartClass/ViewModel/AppViewModel.swift | 12 + smartClass/ViewModel/CalendarViewModel.swift | 87 +++++++ smartClass/smartClassApp.swift | 11 +- 65 files changed, 2612 insertions(+), 12 deletions(-) create mode 100644 smartClass/Assets.xcassets/.DS_Store create mode 100644 smartClass/Assets.xcassets/Red.colorset/Contents.json create mode 100644 smartClass/Assets.xcassets/SecondStart.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/SecondStart.imageset/SecondStart.svg create mode 100644 smartClass/Assets.xcassets/StartScreen.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/StartScreen.imageset/StartScreen.svg create mode 100644 smartClass/Assets.xcassets/Timetable colors/BackgroundGrayColor.colorset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable colors/BlueColor.colorset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable colors/ClassLightGrayColor.colorset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable colors/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable colors/TextGrayColor.colorset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/image 14.png create mode 100644 smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/image 16.png create mode 100644 smartClass/Assets.xcassets/Timetable icons/buildingIcon.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/buildingIcon.imageset/image 15-2.png create mode 100644 smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Group 107.png create mode 100644 smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Rectangle 113.png create mode 100644 smartClass/Assets.xcassets/hello.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/hello.imageset/hello.svg create mode 100644 smartClass/Assets.xcassets/iconCalendar.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconCalendar.imageset/iconCalendar.png create mode 100644 smartClass/Assets.xcassets/iconClock.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconClock.imageset/iconClock.png create mode 100644 smartClass/Assets.xcassets/iconProfile.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconProfile.imageset/iconProfile.png create mode 100644 smartClass/Assets.xcassets/iconTabCalendar.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconTabCalendar.imageset/iconTapCalendar.png create mode 100644 smartClass/Assets.xcassets/iconTabClock.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconTabClock.imageset/iconTapClock.png create mode 100644 smartClass/Assets.xcassets/iconTabProfile.imageset/Contents.json create mode 100644 smartClass/Assets.xcassets/iconTabProfile.imageset/iconTapProfile.png create mode 100644 smartClass/Extension/Color.ext.swift create mode 100644 smartClass/Extension/Date.ext.swift create mode 100644 smartClass/Model/Messages/MessageModel.swift create mode 100644 smartClass/Model/TabBar/TabBarModel.swift create mode 100644 smartClass/Resources/Colors.swift create mode 100644 smartClass/Resources/Icons.swift create mode 100644 smartClass/View/App/Student/Calendar/Calendar View/CalendarView.swift create mode 100644 smartClass/View/App/Student/Calendar/CalendarTabView.swift create mode 100644 smartClass/View/App/Student/Calendar/TimetableCard.swift create mode 100644 smartClass/View/App/Student/Calendar/TimetableCardView.swift create mode 100644 smartClass/View/App/Student/Messages/MessageItemView.swift create mode 100644 smartClass/View/App/Student/Messages/MessagesView.swift create mode 100644 smartClass/View/App/Student/Profile/LessonView.swift create mode 100644 smartClass/View/App/Student/Profile/ProfileView.swift create mode 100644 smartClass/View/App/Student/Profile/SettingTextFieldView.swift create mode 100644 smartClass/View/App/Student/Profile/SettingView.swift create mode 100644 smartClass/View/App/Student/StudentAppView.swift rename smartClass/{ => View}/ContentView.swift (52%) create mode 100644 smartClass/View/Login/GreetingTwoView.swift create mode 100644 smartClass/View/Login/GreetingView.swift create mode 100644 smartClass/View/Login/LoginView.swift create mode 100644 smartClass/View/Login/Parts/TextFieldView.swift create mode 100644 smartClass/View/Login/RegistrationView.swift create mode 100644 smartClass/View/Parts/ButtonView.swift create mode 100644 smartClass/ViewModel/AppViewModel.swift create mode 100644 smartClass/ViewModel/CalendarViewModel.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 16ead9d..8fe9f4b 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -15,6 +15,31 @@ A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700E042A1DDC2A00D60253 /* FontManager.swift */; }; A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700E072A1DDC6100D60253 /* CustomFont.swift */; }; A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700E0A2A1DDCAD00D60253 /* View.ext.swift */; }; + A8CE4D922A2B76B600CF698A /* GreetingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D912A2B76B600CF698A /* GreetingView.swift */; }; + A8CE4D942A2B76DA00CF698A /* GreetingTwoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D932A2B76DA00CF698A /* GreetingTwoView.swift */; }; + A8CE4D962A2B76FB00CF698A /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D952A2B76FB00CF698A /* LoginView.swift */; }; + A8CE4D992A2B773F00CF698A /* TextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D982A2B773F00CF698A /* TextFieldView.swift */; }; + A8CE4D9B2A2B77BB00CF698A /* RegistrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D9A2A2B77BB00CF698A /* RegistrationView.swift */; }; + A8CE4D9F2A2B78D000CF698A /* StudentAppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4D9E2A2B78D000CF698A /* StudentAppView.swift */; }; + A8CE4DA22A2B7E5B00CF698A /* TabBarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DA12A2B7E5B00CF698A /* TabBarModel.swift */; }; + A8CE4DA52A2B7EB800CF698A /* Icons.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DA42A2B7EB800CF698A /* Icons.swift */; }; + A8CE4DA72A2B7FDA00CF698A /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DA62A2B7FDA00CF698A /* Colors.swift */; }; + A8CE4DAA2A2CCC7100CF698A /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DA92A2CCC7100CF698A /* ProfileView.swift */; }; + A8CE4DAC2A2CCD1100CF698A /* SettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DAB2A2CCD1100CF698A /* SettingView.swift */; }; + A8CE4DAE2A2CCD9E00CF698A /* SettingTextFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DAD2A2CCD9E00CF698A /* SettingTextFieldView.swift */; }; + A8CE4DB12A2CCDF600CF698A /* ButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DB02A2CCDF600CF698A /* ButtonView.swift */; }; + A8CE4DB32A2CCE3700CF698A /* LessonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DB22A2CCE3700CF698A /* LessonView.swift */; }; + A8CE4DB62A2DCF3A00CF698A /* MessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DB52A2DCF3A00CF698A /* MessagesView.swift */; }; + A8CE4DB82A2DCF5700CF698A /* MessageItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DB72A2DCF5700CF698A /* MessageItemView.swift */; }; + A8CE4DBC2A2DCF9000CF698A /* MessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DBB2A2DCF9000CF698A /* MessageModel.swift */; }; + A8CE4DC12A2DD1AB00CF698A /* CalendarTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DC02A2DD1AB00CF698A /* CalendarTabView.swift */; }; + A8CE4DC32A2DD1D500CF698A /* TimetableCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DC22A2DD1D500CF698A /* TimetableCard.swift */; }; + A8CE4DC52A2DD1ED00CF698A /* TimetableCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DC42A2DD1ED00CF698A /* TimetableCardView.swift */; }; + A8CE4DC82A2DD76100CF698A /* CalendarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DC72A2DD76100CF698A /* CalendarView.swift */; }; + A8CE4DCA2A2DD79400CF698A /* CalendarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DC92A2DD79400CF698A /* CalendarViewModel.swift */; }; + A8CE4DCC2A2DD80400CF698A /* Date.ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DCB2A2DD80300CF698A /* Date.ext.swift */; }; + A8CE4DCF2A2DD85E00CF698A /* Color.ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DCE2A2DD85E00CF698A /* Color.ext.swift */; }; + A8CE4DD12A2DDFE900CF698A /* AppViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CE4DD02A2DDFE900CF698A /* AppViewModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -28,6 +53,31 @@ A8700E042A1DDC2A00D60253 /* FontManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontManager.swift; sourceTree = ""; }; A8700E072A1DDC6100D60253 /* CustomFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomFont.swift; sourceTree = ""; }; A8700E0A2A1DDCAD00D60253 /* View.ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = View.ext.swift; sourceTree = ""; }; + A8CE4D912A2B76B600CF698A /* GreetingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingView.swift; sourceTree = ""; }; + A8CE4D932A2B76DA00CF698A /* GreetingTwoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GreetingTwoView.swift; sourceTree = ""; }; + A8CE4D952A2B76FB00CF698A /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; + A8CE4D982A2B773F00CF698A /* TextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldView.swift; sourceTree = ""; }; + A8CE4D9A2A2B77BB00CF698A /* RegistrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationView.swift; sourceTree = ""; }; + A8CE4D9E2A2B78D000CF698A /* StudentAppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentAppView.swift; sourceTree = ""; }; + A8CE4DA12A2B7E5B00CF698A /* TabBarModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarModel.swift; sourceTree = ""; }; + A8CE4DA42A2B7EB800CF698A /* Icons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Icons.swift; sourceTree = ""; }; + A8CE4DA62A2B7FDA00CF698A /* Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; }; + A8CE4DA92A2CCC7100CF698A /* ProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = ""; }; + A8CE4DAB2A2CCD1100CF698A /* SettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = ""; }; + A8CE4DAD2A2CCD9E00CF698A /* SettingTextFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingTextFieldView.swift; sourceTree = ""; }; + A8CE4DB02A2CCDF600CF698A /* ButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonView.swift; sourceTree = ""; }; + A8CE4DB22A2CCE3700CF698A /* LessonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LessonView.swift; sourceTree = ""; }; + A8CE4DB52A2DCF3A00CF698A /* MessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesView.swift; sourceTree = ""; }; + A8CE4DB72A2DCF5700CF698A /* MessageItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageItemView.swift; sourceTree = ""; }; + A8CE4DBB2A2DCF9000CF698A /* MessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageModel.swift; sourceTree = ""; }; + A8CE4DC02A2DD1AB00CF698A /* CalendarTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarTabView.swift; sourceTree = ""; }; + A8CE4DC22A2DD1D500CF698A /* TimetableCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimetableCard.swift; sourceTree = ""; }; + A8CE4DC42A2DD1ED00CF698A /* TimetableCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimetableCardView.swift; sourceTree = ""; }; + A8CE4DC72A2DD76100CF698A /* CalendarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarView.swift; sourceTree = ""; }; + A8CE4DC92A2DD79400CF698A /* CalendarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarViewModel.swift; sourceTree = ""; }; + A8CE4DCB2A2DD80300CF698A /* Date.ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Date.ext.swift; sourceTree = ""; }; + A8CE4DCE2A2DD85E00CF698A /* Color.ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Color.ext.swift; sourceTree = ""; }; + A8CE4DD02A2DDFE900CF698A /* AppViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppViewModel.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -60,12 +110,15 @@ A8700DF12A1DDAD500D60253 /* smartClass */ = { isa = PBXGroup; children = ( - A8700E092A1DDC9D00D60253 /* Extension */, + A8CE4DA32A2B7EA700CF698A /* Resources */, A8700E062A1DDC4900D60253 /* Modifiers */, - A8700E032A1DDBFC00D60253 /* Info.plist */, + A8700E092A1DDC9D00D60253 /* Extension */, A8700E002A1DDB6B00D60253 /* Fonts */, + A8CE4D712A2B71E900CF698A /* ViewModel */, + A8CE4D702A2B71E500CF698A /* View */, + A8CE4D6F2A2B71D500CF698A /* Model */, + A8700E032A1DDBFC00D60253 /* Info.plist */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, - A8700DF42A1DDAD500D60253 /* ContentView.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, ); @@ -101,10 +154,160 @@ isa = PBXGroup; children = ( A8700E0A2A1DDCAD00D60253 /* View.ext.swift */, + A8CE4DCB2A2DD80300CF698A /* Date.ext.swift */, + A8CE4DCE2A2DD85E00CF698A /* Color.ext.swift */, ); path = Extension; sourceTree = ""; }; + A8CE4D6F2A2B71D500CF698A /* Model */ = { + isa = PBXGroup; + children = ( + A8CE4DB92A2DCF8000CF698A /* Messages */, + A8CE4DA02A2B7E4200CF698A /* TabBar */, + ); + path = Model; + sourceTree = ""; + }; + A8CE4D702A2B71E500CF698A /* View */ = { + isa = PBXGroup; + children = ( + A8CE4DAF2A2CCDE700CF698A /* Parts */, + A8CE4D732A2B721300CF698A /* Login */, + A8CE4D722A2B720F00CF698A /* App */, + A8700DF42A1DDAD500D60253 /* ContentView.swift */, + ); + path = View; + sourceTree = ""; + }; + A8CE4D712A2B71E900CF698A /* ViewModel */ = { + isa = PBXGroup; + children = ( + A8CE4DC92A2DD79400CF698A /* CalendarViewModel.swift */, + A8CE4DD02A2DDFE900CF698A /* AppViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + A8CE4D722A2B720F00CF698A /* App */ = { + isa = PBXGroup; + children = ( + A8CE4D9D2A2B78B600CF698A /* Student */, + A8CE4D9C2A2B78AD00CF698A /* Admin */, + ); + path = App; + sourceTree = ""; + }; + A8CE4D732A2B721300CF698A /* Login */ = { + isa = PBXGroup; + children = ( + A8CE4D972A2B773600CF698A /* Parts */, + A8CE4D912A2B76B600CF698A /* GreetingView.swift */, + A8CE4D932A2B76DA00CF698A /* GreetingTwoView.swift */, + A8CE4D952A2B76FB00CF698A /* LoginView.swift */, + A8CE4D9A2A2B77BB00CF698A /* RegistrationView.swift */, + ); + path = Login; + sourceTree = ""; + }; + A8CE4D972A2B773600CF698A /* Parts */ = { + isa = PBXGroup; + children = ( + A8CE4D982A2B773F00CF698A /* TextFieldView.swift */, + ); + path = Parts; + sourceTree = ""; + }; + A8CE4D9C2A2B78AD00CF698A /* Admin */ = { + isa = PBXGroup; + children = ( + ); + path = Admin; + sourceTree = ""; + }; + A8CE4D9D2A2B78B600CF698A /* Student */ = { + isa = PBXGroup; + children = ( + A8CE4DBD2A2DD18200CF698A /* Calendar */, + A8CE4DB42A2DCEF000CF698A /* Messages */, + A8CE4DA82A2CCC5B00CF698A /* Profile */, + A8CE4D9E2A2B78D000CF698A /* StudentAppView.swift */, + ); + path = Student; + sourceTree = ""; + }; + A8CE4DA02A2B7E4200CF698A /* TabBar */ = { + isa = PBXGroup; + children = ( + A8CE4DA12A2B7E5B00CF698A /* TabBarModel.swift */, + ); + path = TabBar; + sourceTree = ""; + }; + A8CE4DA32A2B7EA700CF698A /* Resources */ = { + isa = PBXGroup; + children = ( + A8CE4DA42A2B7EB800CF698A /* Icons.swift */, + A8CE4DA62A2B7FDA00CF698A /* Colors.swift */, + ); + path = Resources; + sourceTree = ""; + }; + A8CE4DA82A2CCC5B00CF698A /* Profile */ = { + isa = PBXGroup; + children = ( + A8CE4DA92A2CCC7100CF698A /* ProfileView.swift */, + A8CE4DAB2A2CCD1100CF698A /* SettingView.swift */, + A8CE4DAD2A2CCD9E00CF698A /* SettingTextFieldView.swift */, + A8CE4DB22A2CCE3700CF698A /* LessonView.swift */, + ); + path = Profile; + sourceTree = ""; + }; + A8CE4DAF2A2CCDE700CF698A /* Parts */ = { + isa = PBXGroup; + children = ( + A8CE4DB02A2CCDF600CF698A /* ButtonView.swift */, + ); + path = Parts; + sourceTree = ""; + }; + A8CE4DB42A2DCEF000CF698A /* Messages */ = { + isa = PBXGroup; + children = ( + A8CE4DB52A2DCF3A00CF698A /* MessagesView.swift */, + A8CE4DB72A2DCF5700CF698A /* MessageItemView.swift */, + ); + path = Messages; + sourceTree = ""; + }; + A8CE4DB92A2DCF8000CF698A /* Messages */ = { + isa = PBXGroup; + children = ( + A8CE4DBB2A2DCF9000CF698A /* MessageModel.swift */, + ); + path = Messages; + sourceTree = ""; + }; + A8CE4DBD2A2DD18200CF698A /* Calendar */ = { + isa = PBXGroup; + children = ( + A8CE4DC62A2DD73D00CF698A /* Calendar View */, + A8CE4DC02A2DD1AB00CF698A /* CalendarTabView.swift */, + A8CE4DC22A2DD1D500CF698A /* TimetableCard.swift */, + A8CE4DC42A2DD1ED00CF698A /* TimetableCardView.swift */, + ); + path = Calendar; + sourceTree = ""; + }; + A8CE4DC62A2DD73D00CF698A /* Calendar View */ = { + isa = PBXGroup; + children = ( + A8CE4DC72A2DD76100CF698A /* CalendarView.swift */, + ); + path = "Calendar View"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -176,11 +379,36 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A8CE4DB62A2DCF3A00CF698A /* MessagesView.swift in Sources */, + A8CE4DA52A2B7EB800CF698A /* Icons.swift in Sources */, + A8CE4DC12A2DD1AB00CF698A /* CalendarTabView.swift in Sources */, A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */, + A8CE4DB32A2CCE3700CF698A /* LessonView.swift in Sources */, + A8CE4DCF2A2DD85E00CF698A /* Color.ext.swift in Sources */, + A8CE4DB82A2DCF5700CF698A /* MessageItemView.swift in Sources */, + A8CE4DC82A2DD76100CF698A /* CalendarView.swift in Sources */, + A8CE4D922A2B76B600CF698A /* GreetingView.swift in Sources */, + A8CE4DA72A2B7FDA00CF698A /* Colors.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, + A8CE4DAC2A2CCD1100CF698A /* SettingView.swift in Sources */, A8700E052A1DDC2A00D60253 /* FontManager.swift in Sources */, A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */, + A8CE4DC52A2DD1ED00CF698A /* TimetableCardView.swift in Sources */, + A8CE4DB12A2CCDF600CF698A /* ButtonView.swift in Sources */, + A8CE4DAA2A2CCC7100CF698A /* ProfileView.swift in Sources */, + A8CE4D9F2A2B78D000CF698A /* StudentAppView.swift in Sources */, A8700E0B2A1DDCAD00D60253 /* View.ext.swift in Sources */, + A8CE4DCC2A2DD80400CF698A /* Date.ext.swift in Sources */, + A8CE4DD12A2DDFE900CF698A /* AppViewModel.swift in Sources */, + A8CE4D962A2B76FB00CF698A /* LoginView.swift in Sources */, + A8CE4D942A2B76DA00CF698A /* GreetingTwoView.swift in Sources */, + A8CE4DA22A2B7E5B00CF698A /* TabBarModel.swift in Sources */, + A8CE4D992A2B773F00CF698A /* TextFieldView.swift in Sources */, + A8CE4DBC2A2DCF9000CF698A /* MessageModel.swift in Sources */, + A8CE4D9B2A2B77BB00CF698A /* RegistrationView.swift in Sources */, + A8CE4DCA2A2DD79400CF698A /* CalendarViewModel.swift in Sources */, + A8CE4DAE2A2CCD9E00CF698A /* SettingTextFieldView.swift in Sources */, + A8CE4DC32A2DD1D500CF698A /* TimetableCard.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/smartClass/Assets.xcassets/.DS_Store b/smartClass/Assets.xcassets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a4692d389c539ad32f84b1d721d2c9b38b110895 GIT binary patch literal 10244 zcmeI1&rcIU6vy8blqCo@q$n4YO}uy@SXv$R#2Nm1XuC zEIITOxHZ&xW z%9Z+a?rlgJ`t5ebe;U-9o7vo|jN(cV)#^$isMhexi)TSpmCdp|jH(T#>*)v1xHG<) zojp1#78d8+;$q==&OKT#1zEd8NFvkr|>VD_?ei(n> zc=afh(GGOj-ZaP^;IppyM&Mjg{lN5lvHk?TB5aK1#3Z1}MMA zDwY&=uVQg4MRtmIp%bbc);tBYkJ;J5ogT9yzCib_-T@~kX!q6q*RxSrUc#!szwn!@ zzORp|S(pJoK0_kRMg>H9E~;qp+0vJ+I$J&@&X(zfCC)Bx(cVBCyl0X&avd9wF#<{3 z=<}Ecj76=Gq@CH0oelWnpT{>bmGJE+rMA5xJnXV`Gc~fI{p_-qBM)@+{8iD8)y&0% zcx8&IUBPzRx*qJ+VU<_H0PdNODLYx(fPeeYWoy2gJ6Da5dEqxIwX?rL|9fJ04%ELS zJ9MC*sa<-#C)f7QO;OD}N>N4E7E8bqummgtOTZGiFa$>QNL|kVKm7Io{};v|J5Wo& z5*VI<7+v$$%Ft^kyV52&*Y2XeLgm8mwX{?!xTthIq)Nx5!|C`tsQhl8B^R_yMz*xX i9hATRXTZ>LaaSI}#{YeDH#Yu1Z(jNjW$4Zn|Nj8{i|e)k literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/Red.colorset/Contents.json b/smartClass/Assets.xcassets/Red.colorset/Contents.json new file mode 100644 index 0000000..9edde74 --- /dev/null +++ b/smartClass/Assets.xcassets/Red.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.290", + "green" : "0.290", + "red" : "0.996" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.290", + "green" : "0.290", + "red" : "0.996" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/SecondStart.imageset/Contents.json b/smartClass/Assets.xcassets/SecondStart.imageset/Contents.json new file mode 100644 index 0000000..297eb4d --- /dev/null +++ b/smartClass/Assets.xcassets/SecondStart.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "SecondStart.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/SecondStart.imageset/SecondStart.svg b/smartClass/Assets.xcassets/SecondStart.imageset/SecondStart.svg new file mode 100644 index 0000000..08fbe06 --- /dev/null +++ b/smartClass/Assets.xcassets/SecondStart.imageset/SecondStart.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/StartScreen.imageset/Contents.json b/smartClass/Assets.xcassets/StartScreen.imageset/Contents.json new file mode 100644 index 0000000..7acc41c --- /dev/null +++ b/smartClass/Assets.xcassets/StartScreen.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "StartScreen.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/StartScreen.imageset/StartScreen.svg b/smartClass/Assets.xcassets/StartScreen.imageset/StartScreen.svg new file mode 100644 index 0000000..791ced7 --- /dev/null +++ b/smartClass/Assets.xcassets/StartScreen.imageset/StartScreen.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/Timetable colors/BackgroundGrayColor.colorset/Contents.json b/smartClass/Assets.xcassets/Timetable colors/BackgroundGrayColor.colorset/Contents.json new file mode 100644 index 0000000..00f7d3b --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable colors/BackgroundGrayColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.957", + "green" : "0.957", + "red" : "0.957" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable colors/BlueColor.colorset/Contents.json b/smartClass/Assets.xcassets/Timetable colors/BlueColor.colorset/Contents.json new file mode 100644 index 0000000..d4464c6 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable colors/BlueColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.914", + "green" : "0.424", + "red" : "0.231" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable colors/ClassLightGrayColor.colorset/Contents.json b/smartClass/Assets.xcassets/Timetable colors/ClassLightGrayColor.colorset/Contents.json new file mode 100644 index 0000000..0952145 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable colors/ClassLightGrayColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.690", + "green" : "0.690", + "red" : "0.690" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable colors/Contents.json b/smartClass/Assets.xcassets/Timetable colors/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable colors/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable colors/TextGrayColor.colorset/Contents.json b/smartClass/Assets.xcassets/Timetable colors/TextGrayColor.colorset/Contents.json new file mode 100644 index 0000000..5ab569d --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable colors/TextGrayColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "display-p3", + "components" : { + "alpha" : "1.000", + "blue" : "0.408", + "green" : "0.408", + "red" : "0.408" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/Contents.json b/smartClass/Assets.xcassets/Timetable icons/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/Contents.json b/smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/Contents.json new file mode 100644 index 0000000..2f82bba --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "image 14.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/image 14.png b/smartClass/Assets.xcassets/Timetable icons/arrowIconRight.imageset/image 14.png new file mode 100644 index 0000000000000000000000000000000000000000..931fcac5118d0de9f10406dd4e43302810926c1e GIT binary patch literal 2600 zcmeHJeN0nV6hE&mR7Cl7TD677sNF&$A!bHID0W>6o1?>RaZI4hy5OwRZnY^|;60r> zP@rrft6*m{myBhbu+2>w5$QIEOeg3d6ok?uA~ChC757@{$J>21nNIiboPX>k@1Ebi z_k8@`IVbnNnwRq=b7wD_4FGdJ1VRwDxjupb4vV-An5LzR^bq-i$y7ow?$5ua;v@>&5d$+J*0rw?w3gqIoC#muoKN z_7mz9UX6T5U(Z0|rGXPF{!aey%!cKn=j!=U9OKgcI}@lwuQy!fpO)#4k6I%7)@KB* z1qyet7sYv!AH!tb9(lRK+GeTz*7dW--KtYs4{2g8nQv%ut8Fl-vG!vS)bmZiYAvR7*@3Z*-&W0%eSGP@vxJ{>r~i3{cqAHg!h|YomZj zAxp?aSOU=6Lze2i^TN=a#LPxMmyL|1Ks+q<&4(7UoV;*~NmxDt`+%$OObtLg%hXpT z!^(L8hHK7rrxZH`u=<14DGtVGfSpnKwaXumLBsSfTmjHQ8x# pZ0X>_`ery(M!Y zVw`?zFsMKZ*G9Qg2Jqk3B_Ml#j{~6kN-?_{VAky>gdZ9bFo;`*^j=^=b|doobQfyk z{3-#!u|OVx`0n~ghh2zkelZ&vSdjH(%HD@uATs$V6~_=6G5W&lM`HZ1a4**n=7IMt zqiimyR!C|I!9*^A@d%yVzm?`e^~aRgHQQLDT(B3`bFf%Trx46PaMKuP3bZ?bP^WKZ zjV6J8w0=I;XDLd)hqRH<9w#|Slsd*1fnCIXhEbKF5-DTM4!OTE*y1?)TPU~Iuyob2^MRnRx4$CBqaACw8SYXeY==xX~$%3h!-+62y?yWiu zdT(x>=&~+gf^j(h9OddzAoMFjmpdHy5bpm}oQ#+)m++_~XsO1-CO8wZkk*|Hn`?z| zmV-leS_tCg0gT`6V`kU>y9(E{1H%uPG$3Dgohd0p$d}}c! zpru@QQ;Eb`IVx^AziUZUcG(|Hg5##^oI$VmqP(A;{)cw(WYXLBhrbl>+tM}5N}_JF ziAD!HxKYp4qJz91$;J_yz+`vFR9N<+{>s^kx{Y87Fmdcf= z*?qeM7n0%KB)a#EEwpB-9xDl8_79!Trw9)_p(2`iMYq;J-XF?75WZ`&klS{VNq;Vc z?h?{Swh(owr+N&u?bLf3o1XTRO6R}#dyO|N>oof7x4Uuw7bdjFo7uWTz&J^LM&psA ztnI=cb^ZjU*I3vv)ahJ_;ph&{u;1+%aa64V^Cy7{tI3jiWMgv3nL1~z$skPtpKy$` z`har*6F=cHII;@8V;$P5NxRT!aQnK7yj~67Wccw({)3^psU}0rZsw&%M&9Qy((~Ns L^Te&9lD&TdXfaEH literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/Contents.json b/smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/Contents.json new file mode 100644 index 0000000..b80b68c --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "image 16.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/image 16.png b/smartClass/Assets.xcassets/Timetable icons/audienceIcon.imageset/image 16.png new file mode 100644 index 0000000000000000000000000000000000000000..f25a9efa74ccf1b808ff98944acaebd14ea0f9fa GIT binary patch literal 19099 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 literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Contents.json b/smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Contents.json new file mode 100644 index 0000000..bed3b81 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Group 107.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Group 107.png b/smartClass/Assets.xcassets/Timetable icons/locationIcon.imageset/Group 107.png new file mode 100644 index 0000000000000000000000000000000000000000..2aec5364696d2352b507bd88fa57167604379d7c GIT binary patch literal 24966 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≪%#=E&tcSgM}LnO%L#NiL0JqS$*~3&waJ^pyIK!DEXrkQxY?u!cW3+ zb-#*^96k58Deh{Taoq(;CZR}uE!AEC=e!_lfHe&LM$=mVOkGvp98lfZ&+v`cNIGF4 zU&z|gx|CiYfXXly)_*@SQ3<6rMt{BMS?ZLYP+!$p5J z|DGiED_mHLkbm#zq24w=HUD9cBNdbe^%SY=SC1jUXk`?WZ2l&QJY=k6{GKe{bVucV zlC1(KKf%#SSF(Azp>{U+u1b#xea@F|Ag7nG*=;>)gSOGp@%J7bm1D_TFw0MoC5?_V z1USI2b2{@pUuz1Tq5Ufn7iK_P2s; zoz~DISvRN0>NmY48ABkFAKwUH95QaK9Q=!huWj97^o!NEGGWmBhMaz`^fyy)R5~?u z(dj@Hv(eI@3CkJyLnsMNZQ#*I{2RF8y#s$3dfZeyy#Hvl_>=+hlrfQ2LS0_O=-^2P zQgR8P$WkK)7u)lG>_Kqi@pAiJd6FJ+)Qg%jj2pFU87}yb|KJOa#%{xU<(%moXUuUD zh%7l`aFl}Ab@)y^4OA|zyjPe{a4^xQ5p7baSswkHV@Z6O33U0gzB#RlJA^*g9-uF; zWc8{oenc2+k9SooDrN(qTo(8z7e+K=1-|v&kE!|z1FXDU(CxH zFhQYx6`_L1zKf;o`Pf;Pwl~NGjvTCI9OqrQD*K%k9h%bd{)+V-BpMS1z@z`tGLKnv z9coT^mN(M8X={@J$Oy#A@T=%#nL4%O^rLNFZVgfv!RbFhBxR-rFQ`qo?a9}()(&+w zZoa#m@I~3&r;Wd}3_5$}cKx!^+O+w{wTtRA7c5DnkxcmX*P&?J_2dr2b=>gBwh0=_ z-m`WYf~v>m9k#llUo=!B=#?cbYxlQuT;G1+Z3E^6KjbPJdD+>=Z89;@BcYXT{CkmYX7VDm4DMFBs*k4bQx-`Ro&Ir+u5tQjlU_yfOt(PPM<0q!oT z6+l_Nq$gIz{;&F1T2G*6P_nH`n?$(;w(HXS{qeMgn!F;*7Vq4e(Ts)|pD9nCla;G& zX>lsFdj9LFk@3>*HK#yrCoYYK$0drrhg~ulgL$?oF7K>W68(He{X{`zUPw?H|Z{>H?v0N)# z@0?^AN-Q);=ZelRwF>*8Oo;XQLzawBJs8g?p56XjxFgQOU~e7A^Sn_muI1C z4z5zAgc_DA91SD7I+ z#wW>GiVx20#0+NG7TU(R$4EjM60VYeWX$ z_FkI~?Yf)4mz;eyqQ%N`;o(aJ*?)STd5$5if>X(@6c$v707-3e%JJZewKzE(m894x z*|tgq)k3xr*L^X+1hw-#jwkQjXn;y@Ba615q!*X{0_)0g=+g zH5$i5QRR5}PtTD#@H^ODAG%Mf@=m{okC3y&DJ>CzdYVw>S+{pY#5| zi+cVyleO7ON#)qnI;PP*Q0kBefN`u$`-x~K_du%$Mn(;>$#wR^Gd#cE|CZC*#5_Mb zz;!+tIdGwRrn}mdzt20-Sn53Tt!yG@9Z-8wktcTJ_*oDW;7Fg#-MTq8XjHWmI`pHh z;cAkQGylW9@)?8VEZpyVJjC9mRrfiKe+@K(d$^Vvjz&(h4$T8Ig+~YS#{iQxf{*DI zzE9X$xd~vBkalNmqHcNwh3xBypl1# zbxiVpRx$$E(%s#T+xC98M~Y1v!_H|ESGret_tFAz(wh#hgQKl#vhAQG8(r;s8W>GC zwCt%6n8~RrW=6Uj6r-*enoPoPgShE*FIsj?GR7celnqW6XD2rMF9J@4`XHZlTIFG^ur{|-&@OAm}#ciQOnXqWp&{z;< zn>^ulAw|vH(XZNd!5rQ_yQa`GQ>C1!7xLTAQH~5VcuYaN-21CJJ3XdDCLR-*7PMUa-@yOP@ z^P3BoWtr?<6L0EKHkj7)VQ)dh9H}HX!H83S3!oa1e&iF z`;z*)Q!s@|k|H%rB2L&(DsbPl^hMp3bWj(%U9A~ms|-ch1;ZVLf=CTnvpog$dBH|W zJII{dW;anr>o)*FFr@Q&nd8`zv&h#rlex3F090LmQ=dCz)hD=bshZc8Rs{Gxx z(wHGe!gc7zVCyvn+iiRQUT_NWF}Zs9R_XU4+u--TfJx@Gu*XSBXq#yQVe7CIw-lpT z-U)^3eC4QQGV6sdKb4Ch4!$p0mKWLKqO(1b7CEZ_ZvRIV=u$};sz@@^3FIN(UAl7A zLhgBWPSDGy%9s5nH;nG}+K*iZkC-u{&^XjsjKcPxAET+Q-Kr99PK+^cX?ps9mL^}= z1tI&2?lSbqwW3q&BneW7dNA$kRT=f&%0GlNfcIE3KbozkrvpF5PG_V`+X> zNyrIm_VFG`5oX8z=9sm9TE-Q8Xj{ps|IN|cOH$+NqoTbX?=CV@vo4*G0#dd~`#VY5 z{s-8focbm&XYS9arsL*m9)kiPTCpp!pY9t^lthzz!Dq}qI(Njh+rn^)aqXVG3AY35j^gwR?dR^+J z6kSm2AR#5wXE1;($<_K;)!wbROJ7YW`t1i!5EpVz{#-2^^}E;7t@e1E1d&YOMO1ZX z+xxj}4kO{*3E=*5F5`i&22+@dnEPt`*tOn#I!Q!qdGjsGXh)|gusv6nBgHNt0hapf z)8Th|*Dp7i{9rAYRkfa}j_Te{iRZGyMP0Wi1q z=qn|oGeW+N$4YcddBre)gK-Q+Xlg8LJ4;ccxOBkMtVHWj6gs3O=&Vh>>%pV5^43H-tKK`TkIak4|0_l$9oSAY%RJPua-v=(fl2 z^odS>gWzLM<<;h>nuOt{k{9<0DY84h-~f?9WBtv9ohs4VR`+ zq5!g*YtuE6K5vaN6cl&f3%={M+Ecck20=7=+4hgS-kl%fosS(ogV1x$yZ zB^~R3Fh=5d@IuSQGOdo+<3%r>W15fKT~=o=U+lo}+Uj|BXS`|)-kH}qPFa+U5cYdW zZ=5)_V>DQah>hY^qQ1Gl;6yTgf+noghs-P`QGmW)Am@$Z&k%>b z6rrvOo!-ZXMP1VVheZg>d;?x2wNvJqlfjI&s4hC$N&Cs=os!473C47n#V8zay| z*vYbNk`@fo&D6Px*J`Zn9fBpTt4oqfR_Smox2N48%1q{A3YJFOlyu=7uns6(TE2bw{cRRZuS@K{WR%) z8dL1SSfys@c0%cv27NjEbZ4cjA3@`g#K@%gLXz6=F+Ab}*rHGC6sPl*T{sDH$o&P! zh!Au*zg-pks60a1-HQyzjhrhEeM?LLp4a$Mb(&w(%pV2KI99%jt+t~3brFSjyy@%o zo4+AhizX(M>HCekEFvd)RcxFcAYnFQAyI*B87SUm8_a74K2J}K2qgVO0l@f-4;Y8C z6Bs{6-_Xam}m&O6{t!)GHB5*--#qdEk zUy=B5grb(IxIVv9WZiUVq;p>VgcGqeD@l;+CO>1&wu)+6MR|k~HRKaj!iiycsRA>P zKgA@TDCPx7!>Z9GIJC`n1T`NR%t|XuxD77hOwXk{I_V_{xH*WQb*8LG1b~pveBA3% z+5v6-&6u5+zp!Np5QBNqa%Q7LQkxq7d5TEE(477$6*7512cqNBH<8BB(n-EE-0AOyfQgh_j^_;Yc

v0~sqPee@nk4NRQ##y02Rt(zH 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�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 G8~T6Dz7VSb literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Contents.json b/smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Contents.json new file mode 100644 index 0000000..04f5328 --- /dev/null +++ b/smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Rectangle 113.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Rectangle 113.png b/smartClass/Assets.xcassets/Timetable icons/redRectangleIcon.imageset/Rectangle 113.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a900f03331bc6b02600d3a18e1e4ce33e0a7dd GIT binary patch literal 8631 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 literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/hello.imageset/Contents.json b/smartClass/Assets.xcassets/hello.imageset/Contents.json new file mode 100644 index 0000000..a1477e0 --- /dev/null +++ b/smartClass/Assets.xcassets/hello.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "hello.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/hello.imageset/hello.svg b/smartClass/Assets.xcassets/hello.imageset/hello.svg new file mode 100644 index 0000000..361b209 --- /dev/null +++ b/smartClass/Assets.xcassets/hello.imageset/hello.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartClass/Assets.xcassets/iconCalendar.imageset/Contents.json b/smartClass/Assets.xcassets/iconCalendar.imageset/Contents.json new file mode 100644 index 0000000..733376f --- /dev/null +++ b/smartClass/Assets.xcassets/iconCalendar.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "iconCalendar.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/iconCalendar.imageset/iconCalendar.png b/smartClass/Assets.xcassets/iconCalendar.imageset/iconCalendar.png new file mode 100644 index 0000000000000000000000000000000000000000..eecc2b8a483ecf79d64e288d7b4c0a661f348a6e GIT binary patch literal 3669 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 literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/iconClock.imageset/Contents.json b/smartClass/Assets.xcassets/iconClock.imageset/Contents.json new file mode 100644 index 0000000..f3077c9 --- /dev/null +++ b/smartClass/Assets.xcassets/iconClock.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "iconClock.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/iconClock.imageset/iconClock.png b/smartClass/Assets.xcassets/iconClock.imageset/iconClock.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1e38bed110b4473f3c7325348ad5d570892b65 GIT binary patch literal 2082 zcmV+-2;KLIP)@~0drDELIAGL9O(c600d`2O+f$vv5yPsB8j0Nt_@ba&Fl4^AQMQrpv)psRNuhkYh)Y|R0)0vTU%LK*-I%T zrGhp#Hddh?d>fBbC^cNd|MPh~o)$_GDG@Xf2+TkoR}1&D#*Yj^h%UU}h3B(ymsudJ zjx|ox5MBT`AI}br>FvwO$*C+UDH$MxFpsjSle{9cMx|Nb=^jM zQTASxk_6Ss6Yw@7jbgQTAbcO(QZ!gyWDtf4ipFOi8lQuByjA6uZoA#S*6ntGMgnPS zYI+W$ZH2J;DzBV%I-QSHR8$-z1F(?+w6wI$gqW0zZDeF*2l6entHo zQAct64t3^cG9T7Rb#lUsk@sgw5TXRlz^}Z46Mh-}(6Ut3nKuGf%0^pEI9^^hiLz25 zf})OE3h!=C)caLcRez90fT%qXZaXJx0R{$-kpM(lXeB3%jhnZU#lVzdExb$0aP*7I zNdUS9t*ficgSUhewHFp~mMlhfb@h2vL4IX8hQE*Q+O=yc=|s1nxw*Lui9aH0Ad7-x z{|P5}D!NdGq!ZnOqS1Lq83qgZ8`gQ0EDG}WJ-n03aLjfsC7tLN6q&e38HVEX1z8+e zX$L3xe$t69K|4A+91w4oG8`6aS?j!xL!7YLm}ku-9q1DD`0?X+K)e|-iP~(3$ol-u z37g*E-+vqFK$oBxwz0-2W+rE7Xy^o492EH;PH-j+MX7j=^fotm8xE4;I zK7F1Sj{ay4=|GpDs6V-jWN1Z)$>P-1)Tr$?agq*n35s7+Ez0zWs9>a^f{}s>MhYqzDX3tipn{Qt3PuVl7%8Y=q@aS4 zf(k~LpjhbQP1%o7`Vg~JgGD-B$0YSyC~srH8A>1el>rd6fOL?wpzO>hEVN7+uCgWE zl0ZCOUduzF&?HKdqy@#=do{edF$vmiUsIZZ1vy?`?+S;*8z@PV611tQ=>hz@F?-fw zo#*oM@=|tCRWJDQKY$mrJ`bVSH8wUDQxYUBD8ytpEbJl92@(jpe);m{Y11f;Z4-Z& z6J>|n)7;#gO9_&Ug|gEevz3ADa6%*!2~nCcc9!W|WjH(92un@)6U5szlcXgTYy( z5zT^*73Y|(i})2kLWb%o%{g`I)NYhA-bUg4Xf&$%`)Lw15D2)~Ide`_kHg_uOE&>E zH8sOoSy^Rx>{G_EOAgTLd$gpZNl^Sk>$o4b+19z;?vr$rP+D4g4&SwkcTkPB5n9rS zD=2R*X#WhUMnYR5gMqtTOH$W-D7*s2L=Yxwe=PTihUGTIsxs) z4R0}vYoX|dnDKK5NSDjOZlqfB>&5!x6UFy%x0FsQPEEp!BT== zqrJU-VsCHnLlA5UyKfo(q-&!Wb~iHwKNt>&JI%hcULui5Boa&WAKK~NXNZItWB>pF M07*qoM6N<$f@yTRBLDyZ literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/iconProfile.imageset/Contents.json b/smartClass/Assets.xcassets/iconProfile.imageset/Contents.json new file mode 100644 index 0000000..d62eb6f --- /dev/null +++ b/smartClass/Assets.xcassets/iconProfile.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "iconProfile.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/iconProfile.imageset/iconProfile.png b/smartClass/Assets.xcassets/iconProfile.imageset/iconProfile.png new file mode 100644 index 0000000000000000000000000000000000000000..34b1762ace361239a5c07e17dceb490e391aae8e GIT binary patch literal 2910 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 literal 0 HcmV?d00001 diff --git a/smartClass/Assets.xcassets/iconTabProfile.imageset/Contents.json b/smartClass/Assets.xcassets/iconTabProfile.imageset/Contents.json new file mode 100644 index 0000000..dba5b67 --- /dev/null +++ b/smartClass/Assets.xcassets/iconTabProfile.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "iconTapProfile.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/smartClass/Assets.xcassets/iconTabProfile.imageset/iconTapProfile.png b/smartClass/Assets.xcassets/iconTabProfile.imageset/iconTapProfile.png new file mode 100644 index 0000000000000000000000000000000000000000..c9355a36a8cf085f1e479cd44110056cfaea8ff9 GIT binary patch literal 3218 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 Ef?i(-6aWAK literal 0 HcmV?d00001 diff --git a/smartClass/Extension/Color.ext.swift b/smartClass/Extension/Color.ext.swift new file mode 100644 index 0000000..110bee6 --- /dev/null +++ b/smartClass/Extension/Color.ext.swift @@ -0,0 +1,19 @@ +// +// Color.ext.swift +// smartClass +// +// Created by Ислам Батыргереев on 05.06.2023. +// + +import SwiftUI + +extension Color{ + + static var mBlue = Color("BlueColor") + static var mRed = Color("Red") + static var mGray = Color("BackgroundGrayColor") + static var lGray = Color("ClassLightGrayColor") + static var textGray = Color("TextGrayColor") + + +} diff --git a/smartClass/Extension/Date.ext.swift b/smartClass/Extension/Date.ext.swift new file mode 100644 index 0000000..df7fa0d --- /dev/null +++ b/smartClass/Extension/Date.ext.swift @@ -0,0 +1,58 @@ +// +// Date.ext.swift +// smartClass +// +// Created by Ислам Батыргереев on 05.06.2023. +// + +import Foundation + +extension Date{ + + func formatDate() -> String{ + //dd.MM.yy + let formatter = DateFormatter() + formatter.dateFormat = "dd MMM yyyy" + + return formatter.string(from: self) + } + + func formatTime() -> String{ + //dd.MM.yy + let formatter = DateFormatter() + formatter.dateFormat = "HH:mm" + + return formatter.string(from: self) + } + + func getAllDates() -> [Date]{ + let calendar = Calendar.current + + let startDate = calendar.date(from: Calendar.current.dateComponents([.year, .month], from: self))! + + let range = calendar.range(of: .day, in: .month, for: startDate)! + + //range.removeLast() + + return range.compactMap { day -> Date in + return calendar.date(byAdding: .day, value: day - 1, to: startDate)! + } + + } + + + func startOfMonth() -> Date { + return Calendar.current.date(from: Calendar.current.dateComponents([.year, .month], from: self))! + } + + + func endOfMonth() -> Date { + return Calendar.current.date(byAdding: DateComponents(month: 1, day: -1), to: self.startOfMonth())! + } + + + func getCurentDateStart()->Date{ + let date = Calendar.current.date(bySettingHour: 10, minute: 0, second: 0, of: self)! + return date + } +} diff --git a/smartClass/Extension/View.ext.swift b/smartClass/Extension/View.ext.swift index a993893..99b292e 100644 --- a/smartClass/Extension/View.ext.swift +++ b/smartClass/Extension/View.ext.swift @@ -11,5 +11,65 @@ extension View{ func customFont(font: String, size: CGFloat = 18) -> some View { modifier(CustomFont(font: font, size: size)) } + + + + func sameDate(date1: Date, date2: Date) -> Bool{ + let calendar = Calendar.current + + return calendar.isDate(date1, equalTo: date2, toGranularity: .day) + //return calendar.isDate(date1, inSameDayAs: date2) + } + + func extraDate(currentDate: Date) -> [String]{ + let formatter = DateFormatter() + formatter.dateFormat = "MMMM YYYY" + + let data = formatter.string(from: currentDate) + + return data.components(separatedBy: " ") + } + + + func getCurrenMonth(curentMonth: Int) -> Date{ + + let calendar = Calendar.current + + guard let curentMonth = calendar.date(byAdding: .month, value: curentMonth, to: Date()) else { return Date() } + + return curentMonth + + } + + func extractDate(curentMonth: Int) -> [DateValue]{ + let calendar = Calendar.current + + + let curentMonth = getCurrenMonth(curentMonth: curentMonth) + + + var days = curentMonth.getAllDates().compactMap { date -> DateValue in + let day = calendar.component(.day, from: date) + + return DateValue(day: day, date: date.getCurentDateStart()) + } + + let firstDay = calendar.component(.weekday, from: curentMonth.startOfMonth()) + //let firstDay = calendar.component(.weekday, from: days.first?.date ?? Date()) + + if firstDay == 1 { + for _ in 0..<6{ + days.insert(DateValue(day: -1, date: Date()), at: 0) + } + } else { + for _ in 1.. [Lesson]{ + return [ + Lesson(date: getSumpleDate(1), times: [ + Times(time: "18:00"), + Times(time: "19:00"), + Times(time: "20:00"), + Times(time: "21:00") + ]), + Lesson(date: getSumpleDate(3), times: [ + Times(time: "18:00"), + Times(time: "19:00"), + Times(time: "21:00") + ]), + Lesson(date: getSumpleDate(4), times: [ + Times(time: "18:00"), + Times(time: "19:00"), + Times(time: "21:00") + ]), + Lesson(date: getSumpleDate(6), times: [ + Times(time: "17:00"), + Times(time: "19:00"), + Times(time: "21:00") + ]), + Lesson(date: getSumpleDate(10), times: [ + Times(time: "17:00"), + Times(time: "19:00") + ]) + ] + } + + + private func checkToday(days: [Lesson], completion: (Date) -> (Bool)) -> Lesson?{ + + var resultDates: Lesson? + for day in days { + if completion(day.date) { + resultDates = day + } + } + return resultDates + } + + + private func sameDate(date1: Date, date2: Date) -> Bool{ + let calendar = Calendar.current + + return calendar.isDate(date1, equalTo: date2, toGranularity: .day) + //return calendar.isDate(date1, inSameDayAs: date2) + } +} + +func getSumpleDate(_ offset: Int) -> Date{ + let calendar = Calendar.current + let date = calendar.date(byAdding: .day, value: offset, to: Date()) + return date ?? Date() +} diff --git a/smartClass/smartClassApp.swift b/smartClass/smartClassApp.swift index 86e1f79..c01284a 100644 --- a/smartClass/smartClassApp.swift +++ b/smartClass/smartClassApp.swift @@ -9,9 +9,18 @@ import SwiftUI @main struct smartClassApp: App { + + @ObservedObject var appViewModel = AppViewModel() + var body: some Scene { WindowGroup { - ContentView() + if appViewModel.isLogin{ + StudentAppView() + } else { + GreetingView() + .environmentObject(appViewModel) + } + } } } From fd2d8ea09d76a8b973ef08afba4d3a1abd42ed1e Mon Sep 17 00:00:00 2001 From: rwrun Date: Mon, 19 Jun 2023 13:04:19 +0500 Subject: [PATCH 11/12] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20firebase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smartClass.xcodeproj/project.pbxproj | 51 +++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 23 ++++++++- smartClass/GoogleService-Info.plist | 34 +++++++++++++ smartClass/Model/FirebaseManager.swift | 17 +++++++ smartClass/smartClassApp.swift | 11 ++++ 5 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 smartClass/GoogleService-Info.plist create mode 100644 smartClass/Model/FirebaseManager.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index 8fe9f4b..e7ac857 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + A86CA1482A404025006C3DC8 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A86CA1472A404025006C3DC8 /* GoogleService-Info.plist */; }; + A86CA14B2A404069006C3DC8 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = A86CA14A2A404069006C3DC8 /* FirebaseAuth */; }; + A86CA14D2A404069006C3DC8 /* FirebaseFirestore in Frameworks */ = {isa = PBXBuildFile; productRef = A86CA14C2A404069006C3DC8 /* FirebaseFirestore */; }; + A86CA14F2A404069006C3DC8 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = A86CA14E2A404069006C3DC8 /* FirebaseStorage */; }; + A86CA1512A404108006C3DC8 /* FirebaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86CA1502A404108006C3DC8 /* FirebaseManager.swift */; }; A8700DF32A1DDAD500D60253 /* smartClassApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF22A1DDAD500D60253 /* smartClassApp.swift */; }; A8700DF52A1DDAD500D60253 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8700DF42A1DDAD500D60253 /* ContentView.swift */; }; A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A8700DF62A1DDAD600D60253 /* Assets.xcassets */; }; @@ -43,6 +48,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + A86CA1472A404025006C3DC8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + A86CA1502A404108006C3DC8 /* FirebaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseManager.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; A8700DF22A1DDAD500D60253 /* smartClassApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = smartClassApp.swift; sourceTree = ""; }; A8700DF42A1DDAD500D60253 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -85,6 +92,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A86CA14B2A404069006C3DC8 /* FirebaseAuth in Frameworks */, + A86CA14D2A404069006C3DC8 /* FirebaseFirestore in Frameworks */, + A86CA14F2A404069006C3DC8 /* FirebaseStorage in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -118,6 +128,7 @@ A8CE4D702A2B71E500CF698A /* View */, A8CE4D6F2A2B71D500CF698A /* Model */, A8700E032A1DDBFC00D60253 /* Info.plist */, + A86CA1472A404025006C3DC8 /* GoogleService-Info.plist */, A8700DF22A1DDAD500D60253 /* smartClassApp.swift */, A8700DF62A1DDAD600D60253 /* Assets.xcassets */, A8700DF82A1DDAD600D60253 /* Preview Content */, @@ -165,6 +176,7 @@ children = ( A8CE4DB92A2DCF8000CF698A /* Messages */, A8CE4DA02A2B7E4200CF698A /* TabBar */, + A86CA1502A404108006C3DC8 /* FirebaseManager.swift */, ); path = Model; sourceTree = ""; @@ -324,6 +336,11 @@ dependencies = ( ); name = smartClass; + packageProductDependencies = ( + A86CA14A2A404069006C3DC8 /* FirebaseAuth */, + A86CA14C2A404069006C3DC8 /* FirebaseFirestore */, + A86CA14E2A404069006C3DC8 /* FirebaseStorage */, + ); productName = smartClass; productReference = A8700DEF2A1DDAD500D60253 /* smartClass.app */; productType = "com.apple.product-type.application"; @@ -352,6 +369,9 @@ Base, ); mainGroup = A8700DE62A1DDAD500D60253; + packageReferences = ( + A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); productRefGroup = A8700DF02A1DDAD500D60253 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -367,6 +387,7 @@ buildActionMask = 2147483647; files = ( A8700DFA2A1DDAD600D60253 /* Preview Assets.xcassets in Resources */, + A86CA1482A404025006C3DC8 /* GoogleService-Info.plist in Resources */, A8700E022A1DDBD400D60253 /* Nunito-VariableFont.ttf in Resources */, A8700DF72A1DDAD600D60253 /* Assets.xcassets in Resources */, ); @@ -388,6 +409,7 @@ A8CE4DB82A2DCF5700CF698A /* MessageItemView.swift in Sources */, A8CE4DC82A2DD76100CF698A /* CalendarView.swift in Sources */, A8CE4D922A2B76B600CF698A /* GreetingView.swift in Sources */, + A86CA1512A404108006C3DC8 /* FirebaseManager.swift in Sources */, A8CE4DA72A2B7FDA00CF698A /* Colors.swift in Sources */, A8700E082A1DDC6100D60253 /* CustomFont.swift in Sources */, A8CE4DAC2A2CCD1100CF698A /* SettingView.swift in Sources */, @@ -619,6 +641,35 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; + requirement = { + branch = master; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + A86CA14A2A404069006C3DC8 /* FirebaseAuth */ = { + isa = XCSwiftPackageProductDependency; + package = A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAuth; + }; + A86CA14C2A404069006C3DC8 /* FirebaseFirestore */ = { + isa = XCSwiftPackageProductDependency; + package = A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseFirestore; + }; + A86CA14E2A404069006C3DC8 /* FirebaseStorage */ = { + isa = XCSwiftPackageProductDependency; + package = A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseStorage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = A8700DE72A1DDAD500D60253 /* Project object */; } diff --git a/smartClass.xcodeproj/xcuserdata/ibatyrgereev.xcuserdatad/xcschemes/xcschememanagement.plist b/smartClass.xcodeproj/xcuserdata/ibatyrgereev.xcuserdatad/xcschemes/xcschememanagement.plist index 9b25639..753efba 100644 --- a/smartClass.xcodeproj/xcuserdata/ibatyrgereev.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/smartClass.xcodeproj/xcuserdata/ibatyrgereev.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,11 +4,32 @@ SchemeUserState - smartClass.xcscheme_^#shared#^_ + Promises (Playground) 1.xcscheme + + isShown + + orderHint + 2 + + Promises (Playground) 2.xcscheme + isShown + + orderHint + 3 + + Promises (Playground).xcscheme + + isShown + orderHint 0 + smartClass.xcscheme_^#shared#^_ + + orderHint + 1 + diff --git a/smartClass/GoogleService-Info.plist b/smartClass/GoogleService-Info.plist new file mode 100644 index 0000000..a7fed63 --- /dev/null +++ b/smartClass/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 920975416585-n062cgnmilvpeo4bl6dfhviv9nuo0mas.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.920975416585-n062cgnmilvpeo4bl6dfhviv9nuo0mas + API_KEY + AIzaSyDcvLivDcphJDdwwtjbQg9fOhwAliWpBtA + GCM_SENDER_ID + 920975416585 + PLIST_VERSION + 1 + BUNDLE_ID + ru.namari.smartClass + PROJECT_ID + smartclass-e6d30 + STORAGE_BUCKET + smartclass-e6d30.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:920975416585:ios:22218b9785efc01c73c7d8 + + \ No newline at end of file diff --git a/smartClass/Model/FirebaseManager.swift b/smartClass/Model/FirebaseManager.swift new file mode 100644 index 0000000..3f9e0bb --- /dev/null +++ b/smartClass/Model/FirebaseManager.swift @@ -0,0 +1,17 @@ +// +// FirebaseManager.swift +// smartClass +// +// Created by Ислам Батыргереев on 19.06.2023. +// + +import Foundation +import Firebase + +class FirebaseManager{ + + //auth + + //reg + +} diff --git a/smartClass/smartClassApp.swift b/smartClass/smartClassApp.swift index c01284a..6af2cf8 100644 --- a/smartClass/smartClassApp.swift +++ b/smartClass/smartClassApp.swift @@ -6,11 +6,22 @@ // import SwiftUI +import Firebase + +class AppDelegate: NSObject, UIApplicationDelegate { + func application(_ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + FirebaseApp.configure() + + return true + } +} @main struct smartClassApp: App { @ObservedObject var appViewModel = AppViewModel() + @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { From cadcce7c14f1e95467682c057f6bcc75c005217d Mon Sep 17 00:00:00 2001 From: volt901 Date: Sun, 25 Jun 2023 17:37:10 +0500 Subject: [PATCH 12/12] connect Firebase --- smartClass.xcodeproj/project.pbxproj | 24 ++++++- smartClass/Model/FirebaseManager.swift | 17 ----- smartClass/Model/UserModel.swift | 39 ++++++++++ .../App/Student/Profile/ProfileView.swift | 59 +++++++-------- .../Profile/SettingTextFieldView.swift | 49 +++++++------ .../App/Student/Profile/SettingView.swift | 4 +- smartClass/View/ContentView.swift | 9 ++- smartClass/View/Login/LoginView.swift | 19 +++-- .../View/Login/Parts/TextFieldView.swift | 17 +++-- smartClass/View/Login/RegistrationView.swift | 58 +++++++++------ smartClass/ViewModel/FirebaseManager.swift | 71 +++++++++++++++++++ smartClass/smartClassApp.swift | 20 +++--- 12 files changed, 274 insertions(+), 112 deletions(-) delete mode 100644 smartClass/Model/FirebaseManager.swift create mode 100644 smartClass/Model/UserModel.swift create mode 100644 smartClass/ViewModel/FirebaseManager.swift diff --git a/smartClass.xcodeproj/project.pbxproj b/smartClass.xcodeproj/project.pbxproj index e7ac857..2cdb514 100644 --- a/smartClass.xcodeproj/project.pbxproj +++ b/smartClass.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 7DB230EE2A476162003EE6D5 /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DB230ED2A476162003EE6D5 /* UserModel.swift */; }; + 7DB230F12A484450003EE6D5 /* FirebaseFirestoreSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7DB230F02A484450003EE6D5 /* FirebaseFirestoreSwift */; }; A86CA1482A404025006C3DC8 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A86CA1472A404025006C3DC8 /* GoogleService-Info.plist */; }; A86CA14B2A404069006C3DC8 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = A86CA14A2A404069006C3DC8 /* FirebaseAuth */; }; A86CA14D2A404069006C3DC8 /* FirebaseFirestore in Frameworks */ = {isa = PBXBuildFile; productRef = A86CA14C2A404069006C3DC8 /* FirebaseFirestore */; }; @@ -48,6 +50,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 7DB230ED2A476162003EE6D5 /* UserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserModel.swift; sourceTree = ""; }; A86CA1472A404025006C3DC8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; A86CA1502A404108006C3DC8 /* FirebaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseManager.swift; sourceTree = ""; }; A8700DEF2A1DDAD500D60253 /* smartClass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smartClass.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -95,17 +98,26 @@ A86CA14B2A404069006C3DC8 /* FirebaseAuth in Frameworks */, A86CA14D2A404069006C3DC8 /* FirebaseFirestore in Frameworks */, A86CA14F2A404069006C3DC8 /* FirebaseStorage in Frameworks */, + 7DB230F12A484450003EE6D5 /* FirebaseFirestoreSwift in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 7DB230EF2A48444F003EE6D5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; A8700DE62A1DDAD500D60253 = { isa = PBXGroup; children = ( A8700DF12A1DDAD500D60253 /* smartClass */, A8700DF02A1DDAD500D60253 /* Products */, + 7DB230EF2A48444F003EE6D5 /* Frameworks */, ); sourceTree = ""; }; @@ -174,9 +186,9 @@ A8CE4D6F2A2B71D500CF698A /* Model */ = { isa = PBXGroup; children = ( + 7DB230ED2A476162003EE6D5 /* UserModel.swift */, A8CE4DB92A2DCF8000CF698A /* Messages */, A8CE4DA02A2B7E4200CF698A /* TabBar */, - A86CA1502A404108006C3DC8 /* FirebaseManager.swift */, ); path = Model; sourceTree = ""; @@ -184,10 +196,10 @@ A8CE4D702A2B71E500CF698A /* View */ = { isa = PBXGroup; children = ( + A8700DF42A1DDAD500D60253 /* ContentView.swift */, A8CE4DAF2A2CCDE700CF698A /* Parts */, A8CE4D732A2B721300CF698A /* Login */, A8CE4D722A2B720F00CF698A /* App */, - A8700DF42A1DDAD500D60253 /* ContentView.swift */, ); path = View; sourceTree = ""; @@ -197,6 +209,7 @@ children = ( A8CE4DC92A2DD79400CF698A /* CalendarViewModel.swift */, A8CE4DD02A2DDFE900CF698A /* AppViewModel.swift */, + A86CA1502A404108006C3DC8 /* FirebaseManager.swift */, ); path = ViewModel; sourceTree = ""; @@ -340,6 +353,7 @@ A86CA14A2A404069006C3DC8 /* FirebaseAuth */, A86CA14C2A404069006C3DC8 /* FirebaseFirestore */, A86CA14E2A404069006C3DC8 /* FirebaseStorage */, + 7DB230F02A484450003EE6D5 /* FirebaseFirestoreSwift */, ); productName = smartClass; productReference = A8700DEF2A1DDAD500D60253 /* smartClass.app */; @@ -426,6 +440,7 @@ A8CE4D942A2B76DA00CF698A /* GreetingTwoView.swift in Sources */, A8CE4DA22A2B7E5B00CF698A /* TabBarModel.swift in Sources */, A8CE4D992A2B773F00CF698A /* TextFieldView.swift in Sources */, + 7DB230EE2A476162003EE6D5 /* UserModel.swift in Sources */, A8CE4DBC2A2DCF9000CF698A /* MessageModel.swift in Sources */, A8CE4D9B2A2B77BB00CF698A /* RegistrationView.swift in Sources */, A8CE4DCA2A2DD79400CF698A /* CalendarViewModel.swift in Sources */, @@ -654,6 +669,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 7DB230F02A484450003EE6D5 /* FirebaseFirestoreSwift */ = { + isa = XCSwiftPackageProductDependency; + package = A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseFirestoreSwift; + }; A86CA14A2A404069006C3DC8 /* FirebaseAuth */ = { isa = XCSwiftPackageProductDependency; package = A86CA1492A404069006C3DC8 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; diff --git a/smartClass/Model/FirebaseManager.swift b/smartClass/Model/FirebaseManager.swift deleted file mode 100644 index 3f9e0bb..0000000 --- a/smartClass/Model/FirebaseManager.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// FirebaseManager.swift -// smartClass -// -// Created by Ислам Батыргереев on 19.06.2023. -// - -import Foundation -import Firebase - -class FirebaseManager{ - - //auth - - //reg - -} diff --git a/smartClass/Model/UserModel.swift b/smartClass/Model/UserModel.swift new file mode 100644 index 0000000..a871814 --- /dev/null +++ b/smartClass/Model/UserModel.swift @@ -0,0 +1,39 @@ +// +// UserModel.swift +// smartClass +// +// Created by Владимир Ширяев on 24.06.2023. +// + +import Foundation + +struct UserModel:Identifiable, Codable { + let id: String + let email: String + let password: String + + // личная информация + let surname: String + let firstName: String + let fatherName: String + let birthDate: Date + + // проф. сведения + let university: String + let specialty: String + let group: String + let course: String + + var fullname: String { + surname + " " + firstName + } + + var initials: String{ + let formatter = PersonNameComponentsFormatter() + if let components = formatter.personNameComponents(from: fullname){ + formatter.style = .abbreviated + return formatter.string(from: components) + } + return "" + } +} diff --git a/smartClass/View/App/Student/Profile/ProfileView.swift b/smartClass/View/App/Student/Profile/ProfileView.swift index 29234b1..2506c3f 100644 --- a/smartClass/View/App/Student/Profile/ProfileView.swift +++ b/smartClass/View/App/Student/Profile/ProfileView.swift @@ -8,42 +8,45 @@ import SwiftUI struct ProfileView: View { + @EnvironmentObject var viewModel: FirebaseManager + var body: some View { //NavigationView { - ScrollView { - - VStack(alignment: .leading){ + if let user = viewModel.currentUser { + ScrollView { + VStack(alignment: .leading){ - Text("1 курс") - .customFont(font: FontManager.main, size: 18) - .foregroundColor(.textGray) - - } - HStack { - Text("Специальность") - .customFont(font: FontManager.Nunito.black, size: 18) - Text("ИВТ") + VStack(alignment: .leading){ + Text("\(user.course) курс") + .customFont(font: FontManager.main, size: 18) + .foregroundColor(.textGray) + + } + HStack { + Text("Специальность") + .customFont(font: FontManager.Nunito.black, size: 18) + Text(user.specialty) .foregroundColor(.white) .customFont(font: FontManager.main, size: 14) .padding(EdgeInsets(top: 3, leading: 10, bottom: 2, trailing: 10)) .background(Color.mBlue) .cornerRadius(12) - - } - .padding(.bottom, 20) - HStack { - Text("Предметы в этом семестре") - .fontWeight(.bold) - Spacer() + + } + .padding(.bottom, 20) + HStack { + Text("Предметы в этом семестре") + .fontWeight(.bold) + Spacer() + } + LessonView() + LessonView() + LessonView() } - LessonView() - LessonView() - LessonView() + .padding(.bottom, 70) + } - .padding(.bottom, 70) - - } - .navigationTitle("Имя Фамилия") + .navigationTitle(user.fullname) .padding(.horizontal) .toolbar { ToolbarItem { @@ -56,8 +59,8 @@ struct ProfileView: View { } } } - //} - + //} + } } } diff --git a/smartClass/View/App/Student/Profile/SettingTextFieldView.swift b/smartClass/View/App/Student/Profile/SettingTextFieldView.swift index 2d1bf08..1208d16 100644 --- a/smartClass/View/App/Student/Profile/SettingTextFieldView.swift +++ b/smartClass/View/App/Student/Profile/SettingTextFieldView.swift @@ -8,39 +8,46 @@ import SwiftUI struct SettingTextFieldView: View { + + @State var name = "" @State var surname = "" @State var nameSurname = "" @State var date = Date() + + @EnvironmentObject var viewModel: FirebaseManager + var body: some View { - VStack { - HStack { - Text("Личные данные") - .foregroundColor(.gray) - Spacer() - } - .padding(.horizontal) - .padding(.top) + if let user = viewModel.currentUser { VStack { - TextFieldView(customStateProperty: $name, customText: "Имя", color: .white) - - TextFieldView(customStateProperty: $surname, customText: "Фамилия", color: .white) - - - TextFieldView(customStateProperty: $nameSurname, customText: "Отчество", color: .white) - HStack { - Text("Дата рождения") - .fontWeight(.bold) + Text("Личные данные") + .foregroundColor(.gray) Spacer() + } + .padding(.horizontal) + .padding(.top) + VStack { + TextFieldView(customStateProperty: $name, customText: user.firstName, color: .white) + + TextFieldView(customStateProperty: $surname, customText: user.surname, color: .white) + + + TextFieldView(customStateProperty: $nameSurname, customText: user.fatherName, color: .white) - DatePicker("", selection: $date, displayedComponents: .date) + HStack { + Text("Дата рождения") + .fontWeight(.bold) + Spacer() + + DatePicker("", selection: $date, displayedComponents: .date) + } + .padding() } .padding() + .background(Color(.systemGray6)) + .cornerRadius(20) } - .padding() - .background(Color(.systemGray6)) - .cornerRadius(20) } } } diff --git a/smartClass/View/App/Student/Profile/SettingView.swift b/smartClass/View/App/Student/Profile/SettingView.swift index 12965be..afe78e1 100644 --- a/smartClass/View/App/Student/Profile/SettingView.swift +++ b/smartClass/View/App/Student/Profile/SettingView.swift @@ -8,6 +8,8 @@ import SwiftUI struct SettingView: View { + @EnvironmentObject var viewModel: FirebaseManager + var body: some View { ZStack{ ScrollView{ @@ -22,7 +24,7 @@ struct SettingView: View { } Button { - //some code + viewModel.singOut() } label: { Text("Выйти") .foregroundColor(.red) diff --git a/smartClass/View/ContentView.swift b/smartClass/View/ContentView.swift index d65856e..187d3dc 100644 --- a/smartClass/View/ContentView.swift +++ b/smartClass/View/ContentView.swift @@ -8,8 +8,15 @@ import SwiftUI struct ContentView: View { + @EnvironmentObject var viewModel: FirebaseManager var body: some View { - StudentAppView() + Group { + if viewModel.userSession != nil { + StudentAppView() + } else { + GreetingView() + } + } } } diff --git a/smartClass/View/Login/LoginView.swift b/smartClass/View/Login/LoginView.swift index 5ff276f..bc62ba4 100644 --- a/smartClass/View/Login/LoginView.swift +++ b/smartClass/View/Login/LoginView.swift @@ -9,6 +9,7 @@ import SwiftUI struct LoginView: View { @Environment(\.dismiss) var dismiss + var body: some View { ZStack(alignment: .bottom){ VStack{ @@ -33,13 +34,12 @@ struct LoginView: View { .customFont(font: FontManager.Nunito.bold, size: 30) Spacer() } - .padding(.horizontal, 40) + .padding(.horizontal, 20) Spacer() } VStack{ EmailPasswordView() - } .padding(.bottom, 40) .background(.white) @@ -48,7 +48,7 @@ struct LoginView: View { } } - .padding(.top, 30) + .padding(.top, 50) .navigationBarBackButtonHidden(true) .ignoresSafeArea() } @@ -63,13 +63,15 @@ struct LoginView_Previews: PreviewProvider { struct EmailPasswordView: View { @State private var emailState: String = "" @State private var passwordState: String = "" - @EnvironmentObject var appViewModel: AppViewModel + //@EnvironmentObject var appViewModel: AppViewModel + @EnvironmentObject var viewModel: FirebaseManager var body: some View { VStack{ HStack{ Text("Авторизация") - .font(.custom("Nunito-Bold", size: 20)) + .customFont(font: FontManager.Nunito.bold, size: 20) + Spacer() } .padding(.horizontal,39) @@ -78,11 +80,14 @@ struct EmailPasswordView: View { VStack(spacing: 20){ TextFieldView(customStateProperty: $emailState, customText: "Email") - TextFieldView(customStateProperty: $passwordState, customText: "Пароль") + TextFieldView(customStateProperty: $passwordState, customText: "Пароль", isSecure: true) Button { - appViewModel.isLogin.toggle() + // appViewModel.isLogin.toggle() + Task { + try await viewModel.singIn(withEmail: emailState, password: passwordState) + } } label: { ButtonView(btnText: "Войти") } diff --git a/smartClass/View/Login/Parts/TextFieldView.swift b/smartClass/View/Login/Parts/TextFieldView.swift index b27a364..609b508 100644 --- a/smartClass/View/Login/Parts/TextFieldView.swift +++ b/smartClass/View/Login/Parts/TextFieldView.swift @@ -11,15 +11,20 @@ struct TextFieldView: View { @Binding var customStateProperty: String var customText: String var color = Color.mGray + var isSecure = false var body: some View { VStack { - TextField(customText, text: $customStateProperty) - .frame(height: 52) - .padding(.horizontal,23) - .background(color) - .cornerRadius(10) - .customFont(font: FontManager.main, size: 18) + if isSecure { + SecureField(customText, text: $customStateProperty) + } else { + TextField(customText, text: $customStateProperty) + } } + .frame(height: 52) + .padding(.horizontal,23) + .background(color) + .cornerRadius(10) + .customFont(font: FontManager.main, size: 18) } } diff --git a/smartClass/View/Login/RegistrationView.swift b/smartClass/View/Login/RegistrationView.swift index 5d5ba16..628b4ae 100644 --- a/smartClass/View/Login/RegistrationView.swift +++ b/smartClass/View/Login/RegistrationView.swift @@ -6,9 +6,26 @@ // import SwiftUI +import Firebase struct RegistrationView: View { + + @State private var emailNewUser: String = "" + @State private var passwordNewUser: String = "" + @State private var passwordTwoNewUser: String = "" + + @State private var surnameState: String = "" + @State private var firstNameState: String = "" + @State private var fatherNameState: String = "" + @State private var birthDate = Date.now + + @State private var universityState: String = "" + @State private var specialtyState: String = "" + @State private var groupState: String = "" + @State private var courseState: String = "" + @Environment(\.dismiss) var dismiss + @EnvironmentObject var viewModel: FirebaseManager var body: some View { ScrollView{ @@ -31,16 +48,17 @@ struct RegistrationView: View { .padding(.horizontal, 20) Spacer() } - EmailView() + EmailView(emailNewUser: $emailNewUser, passwordNewUser: $passwordNewUser, passwordTwoNewUser: $passwordTwoNewUser) .padding(.top,25) .padding(.bottom,25) - PersonalityView() + PersonalityView(surnameState: $surnameState, firstNameState: $firstNameState, fatherNameState: $fatherNameState, birthDate: $birthDate) .padding(.bottom,25) - UniversityView() - // .padding(.bottom,25) + UniversityView(universityState: $universityState, specialtyState: $specialtyState, groupState: $groupState, courseState: $courseState) Button { - // + Task { + try await viewModel.createUser(withEmail: emailNewUser, password: passwordNewUser, surname: surnameState, firstName: firstNameState, fatherName: firstNameState, birthDate: birthDate, university: universityState, specialtyState: specialtyState, group: groupState, courseState: courseState) + } } label: { Text("Далее") .foregroundColor(.white) @@ -64,9 +82,9 @@ struct RegistrationView_Previews: PreviewProvider { } struct EmailView: View { - @State private var emailState: String = "" - @State private var passwordState: String = "" - @State private var passwordTwoState: String = "" + @Binding var emailNewUser: String + @Binding var passwordNewUser: String + @Binding var passwordTwoNewUser: String var body: some View { VStack(spacing: 10){ @@ -77,9 +95,9 @@ struct EmailView: View { Spacer() } VStack(spacing: 15){ - TextFieldView(customStateProperty: $emailState, customText: "Email") - TextFieldView(customStateProperty: $passwordState, customText: "Пароль") - TextFieldView(customStateProperty: $passwordTwoState, customText: "Повторить пароль") + TextFieldView(customStateProperty: $emailNewUser, customText: "Email") + TextFieldView(customStateProperty: $passwordNewUser, customText: "Пароль", isSecure: true) + TextFieldView(customStateProperty: $passwordTwoNewUser, customText: "Повторить пароль", isSecure: true) } .padding(20) .background(.white) @@ -91,10 +109,10 @@ struct EmailView: View { struct PersonalityView: View { - @State private var surnameState: String = "" - @State private var firstNameState: String = "" - @State private var fatherNameState: String = "" - @State private var birthDate = Date.now + @Binding var surnameState: String + @Binding var firstNameState: String + @Binding var fatherNameState: String + @Binding var birthDate: Date var body: some View { @@ -126,10 +144,10 @@ struct PersonalityView: View { struct UniversityView: View { - @State private var universityState: String = "" - @State private var specialtyState: String = "" - @State private var groupState: String = "" - @State private var courseState: String = "" + @Binding var universityState: String + @Binding var specialtyState: String + @Binding var groupState: String + @Binding var courseState: String var body: some View { VStack { @@ -164,7 +182,7 @@ struct UniversityView: View { .padding(.horizontal,19) TextFieldView(customStateProperty: $groupState, customText: "") - //.frame(width: 188) + .frame(width: 188) } VStack(alignment: .leading){ diff --git a/smartClass/ViewModel/FirebaseManager.swift b/smartClass/ViewModel/FirebaseManager.swift new file mode 100644 index 0000000..62e95b6 --- /dev/null +++ b/smartClass/ViewModel/FirebaseManager.swift @@ -0,0 +1,71 @@ +// +// FirebaseManager.swift +// smartClass +// +// Created by Ислам Батыргереев on 19.06.2023. +// + +import Foundation +import Firebase +import FirebaseFirestoreSwift + +@MainActor +class FirebaseManager: ObservableObject { + @Published var userSession: FirebaseAuth.User? + @Published var currentUser: UserModel? + + init (){ + // self.userSession = Auth.auth().currentUser + + Task { + await fetchUser() + } + } + + func singIn(withEmail email: String, password: String) async throws{ + do { + let result = try await Auth.auth().signIn(withEmail: email, password: password) + self.userSession = result.user + await fetchUser() + }catch{ + print ("Debug: sing in \(error.localizedDescription)") + } + } + + func createUser (withEmail email: String, password: String, surname: String, firstName: String, fatherName: String, birthDate: Date, university: String, specialtyState: String, group: String, courseState: String) async throws{ + do { + let result = try await Auth.auth().createUser(withEmail: email, password: password) + self.userSession = result.user + let user = UserModel(id: result.user.uid, email: email, password: password, surname: surname, firstName: firstName, fatherName: fatherName, birthDate: birthDate, university: university, specialty: specialtyState, group: group, course: courseState) + let encodedUser = try Firestore.Encoder().encode(user) + try await Firestore.firestore().collection("users").document(user.id).setData(encodedUser) + await fetchUser() + } catch { + print ("Debug: create user\(error.localizedDescription)") + } + } + + func singOut(){ + do { + try Auth.auth().signOut() + self.userSession = nil + self.currentUser = nil + } catch{ + print("Debug: error sing out: \(error.localizedDescription)") + } + + } + + func deleteAccount(){ + + } + + func fetchUser() async { + guard let uid = Auth.auth().currentUser?.uid else {return} + guard let snapshot = try? await Firestore.firestore().collection("users").document(uid).getDocument() else {return} + self.currentUser = try? snapshot.data(as: UserModel.self) + + print ("Debug: \(String(describing: self.currentUser))") + } +} + diff --git a/smartClass/smartClassApp.swift b/smartClass/smartClassApp.swift index 6af2cf8..8655371 100644 --- a/smartClass/smartClassApp.swift +++ b/smartClass/smartClassApp.swift @@ -19,19 +19,21 @@ class AppDelegate: NSObject, UIApplicationDelegate { @main struct smartClassApp: App { - - @ObservedObject var appViewModel = AppViewModel() + @StateObject var viewModel = FirebaseManager() + // @ObservedObject var appViewModel = AppViewModel() + @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { - if appViewModel.isLogin{ - StudentAppView() - } else { - GreetingView() - .environmentObject(appViewModel) - } - +// if appViewModel.isLogin{ +// StudentAppView() +// } else { + ContentView() + //GreetingView() + //.environmentObject(appViewModel) + .environmentObject(viewModel) + //} } } }