- Finalised The side menu integration in the project.
@@ -9,6 +9,19 @@
|
|||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
5202AAFE2BDF90590043B7BD /* TextFieldImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5202AAFD2BDF90590043B7BD /* TextFieldImage.swift */; };
|
5202AAFE2BDF90590043B7BD /* TextFieldImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5202AAFD2BDF90590043B7BD /* TextFieldImage.swift */; };
|
||||||
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5202AB002BDFA7900043B7BD /* EmailValidation.swift */; };
|
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5202AB002BDFA7900043B7BD /* EmailValidation.swift */; };
|
||||||
|
522242592BFC73E40085C632 /* BasicTransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5222424D2BFC73E40085C632 /* BasicTransitionAnimator.swift */; };
|
||||||
|
5222425A2BFC73E40085C632 /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5222424E2BFC73E40085C632 /* Delegate.swift */; };
|
||||||
|
5222425B2BFC73E40085C632 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5222424F2BFC73E40085C632 /* Preferences.swift */; };
|
||||||
|
5222425C2BFC73E40085C632 /* Segue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242502BFC73E40085C632 /* Segue.swift */; };
|
||||||
|
5222425D2BFC73E40085C632 /* SideMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242522BFC73E40085C632 /* SideMenuController.swift */; };
|
||||||
|
5222425E2BFC73E40085C632 /* StatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242532BFC73E40085C632 /* StatusBar.swift */; };
|
||||||
|
5222425F2BFC73E40085C632 /* TransitionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242542BFC73E40085C632 /* TransitionContext.swift */; };
|
||||||
|
522242602BFC73E40085C632 /* UIView+Container.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242552BFC73E40085C632 /* UIView+Container.swift */; };
|
||||||
|
522242612BFC73E40085C632 /* UIViewController+Container.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242562BFC73E40085C632 /* UIViewController+Container.swift */; };
|
||||||
|
522242622BFC73E40085C632 /* UIViewController+SideMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242572BFC73E40085C632 /* UIViewController+SideMenu.swift */; };
|
||||||
|
522242662BFC74380085C632 /* MyListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242632BFC74380085C632 /* MyListVC.swift */; };
|
||||||
|
522242682BFC74380085C632 /* TabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242652BFC74380085C632 /* TabBarVC.swift */; };
|
||||||
|
5222426A2BFC7AFC0085C632 /* SideMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522242692BFC7AFC0085C632 /* SideMenuVC.swift */; };
|
||||||
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */; };
|
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */; };
|
||||||
523ED2602BDA2BC700CFED02 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */; };
|
523ED2602BDA2BC700CFED02 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */; };
|
||||||
523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2612BDA2BC700CFED02 /* SplashVC.swift */; };
|
523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2612BDA2BC700CFED02 /* SplashVC.swift */; };
|
||||||
@@ -18,6 +31,9 @@
|
|||||||
523ED2752BDA2BC900CFED02 /* WOKATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2742BDA2BC900CFED02 /* WOKATests.swift */; };
|
523ED2752BDA2BC900CFED02 /* WOKATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2742BDA2BC900CFED02 /* WOKATests.swift */; };
|
||||||
523ED27F2BDA2BC900CFED02 /* WOKAUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED27E2BDA2BC900CFED02 /* WOKAUITests.swift */; };
|
523ED27F2BDA2BC900CFED02 /* WOKAUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED27E2BDA2BC900CFED02 /* WOKAUITests.swift */; };
|
||||||
523ED2812BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2802BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift */; };
|
523ED2812BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523ED2802BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift */; };
|
||||||
|
525327D02BFCBC4A00F64283 /* ExploreWokaVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525327CF2BFCBC4A00F64283 /* ExploreWokaVC.swift */; };
|
||||||
|
525327D62BFCC23600F64283 /* SideMenuVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525327D52BFCC23600F64283 /* SideMenuVM.swift */; };
|
||||||
|
525327D92BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525327D82BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift */; };
|
||||||
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */; };
|
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */; };
|
||||||
525953CF2BE8B28F00191286 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525953CE2BE8B28F00191286 /* Utilities.swift */; };
|
525953CF2BE8B28F00191286 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525953CE2BE8B28F00191286 /* Utilities.swift */; };
|
||||||
525953D12BE8B2B200191286 /* LLSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525953D02BE8B2B200191286 /* LLSpinner.swift */; };
|
525953D12BE8B2B200191286 /* LLSpinner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525953D02BE8B2B200191286 /* LLSpinner.swift */; };
|
||||||
@@ -142,6 +158,20 @@
|
|||||||
26B5FF3DFDEFA683C1B79490 /* Pods-WOKA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WOKA.debug.xcconfig"; path = "Target Support Files/Pods-WOKA/Pods-WOKA.debug.xcconfig"; sourceTree = "<group>"; };
|
26B5FF3DFDEFA683C1B79490 /* Pods-WOKA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WOKA.debug.xcconfig"; path = "Target Support Files/Pods-WOKA/Pods-WOKA.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
5202AAFD2BDF90590043B7BD /* TextFieldImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldImage.swift; sourceTree = "<group>"; };
|
5202AAFD2BDF90590043B7BD /* TextFieldImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldImage.swift; sourceTree = "<group>"; };
|
||||||
5202AB002BDFA7900043B7BD /* EmailValidation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailValidation.swift; sourceTree = "<group>"; };
|
5202AB002BDFA7900043B7BD /* EmailValidation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailValidation.swift; sourceTree = "<group>"; };
|
||||||
|
5222424D2BFC73E40085C632 /* BasicTransitionAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicTransitionAnimator.swift; sourceTree = "<group>"; };
|
||||||
|
5222424E2BFC73E40085C632 /* Delegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Delegate.swift; sourceTree = "<group>"; };
|
||||||
|
5222424F2BFC73E40085C632 /* Preferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
|
||||||
|
522242502BFC73E40085C632 /* Segue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Segue.swift; sourceTree = "<group>"; };
|
||||||
|
522242512BFC73E40085C632 /* SideMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideMenu.h; sourceTree = "<group>"; };
|
||||||
|
522242522BFC73E40085C632 /* SideMenuController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideMenuController.swift; sourceTree = "<group>"; };
|
||||||
|
522242532BFC73E40085C632 /* StatusBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusBar.swift; sourceTree = "<group>"; };
|
||||||
|
522242542BFC73E40085C632 /* TransitionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransitionContext.swift; sourceTree = "<group>"; };
|
||||||
|
522242552BFC73E40085C632 /* UIView+Container.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Container.swift"; sourceTree = "<group>"; };
|
||||||
|
522242562BFC73E40085C632 /* UIViewController+Container.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Container.swift"; sourceTree = "<group>"; };
|
||||||
|
522242572BFC73E40085C632 /* UIViewController+SideMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+SideMenu.swift"; sourceTree = "<group>"; };
|
||||||
|
522242632BFC74380085C632 /* MyListVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyListVC.swift; sourceTree = "<group>"; };
|
||||||
|
522242652BFC74380085C632 /* TabBarVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBarVC.swift; sourceTree = "<group>"; };
|
||||||
|
522242692BFC7AFC0085C632 /* SideMenuVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideMenuVC.swift; sourceTree = "<group>"; };
|
||||||
523ED25A2BDA2BC700CFED02 /* WOKA.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WOKA.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
523ED25A2BDA2BC700CFED02 /* WOKA.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WOKA.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||||
@@ -155,6 +185,9 @@
|
|||||||
523ED27A2BDA2BC900CFED02 /* WOKAUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WOKAUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
523ED27A2BDA2BC900CFED02 /* WOKAUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WOKAUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
523ED27E2BDA2BC900CFED02 /* WOKAUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WOKAUITests.swift; sourceTree = "<group>"; };
|
523ED27E2BDA2BC900CFED02 /* WOKAUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WOKAUITests.swift; sourceTree = "<group>"; };
|
||||||
523ED2802BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WOKAUITestsLaunchTests.swift; sourceTree = "<group>"; };
|
523ED2802BDA2BC900CFED02 /* WOKAUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WOKAUITestsLaunchTests.swift; sourceTree = "<group>"; };
|
||||||
|
525327CF2BFCBC4A00F64283 /* ExploreWokaVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreWokaVC.swift; sourceTree = "<group>"; };
|
||||||
|
525327D52BFCC23600F64283 /* SideMenuVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideMenuVM.swift; sourceTree = "<group>"; };
|
||||||
|
525327D82BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFuncStartupSoundHandling.swift; sourceTree = "<group>"; };
|
||||||
5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPhoneHomeBtnOrNotch.swift; sourceTree = "<group>"; };
|
5257B2642BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckPhoneHomeBtnOrNotch.swift; sourceTree = "<group>"; };
|
||||||
525953CE2BE8B28F00191286 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = "<group>"; };
|
525953CE2BE8B28F00191286 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = "<group>"; };
|
||||||
525953D02BE8B2B200191286 /* LLSpinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLSpinner.swift; sourceTree = "<group>"; };
|
525953D02BE8B2B200191286 /* LLSpinner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLSpinner.swift; sourceTree = "<group>"; };
|
||||||
@@ -318,6 +351,24 @@
|
|||||||
path = Validations;
|
path = Validations;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
522242582BFC73E40085C632 /* SideMenu */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
5222424D2BFC73E40085C632 /* BasicTransitionAnimator.swift */,
|
||||||
|
5222424E2BFC73E40085C632 /* Delegate.swift */,
|
||||||
|
5222424F2BFC73E40085C632 /* Preferences.swift */,
|
||||||
|
522242502BFC73E40085C632 /* Segue.swift */,
|
||||||
|
522242512BFC73E40085C632 /* SideMenu.h */,
|
||||||
|
522242522BFC73E40085C632 /* SideMenuController.swift */,
|
||||||
|
522242532BFC73E40085C632 /* StatusBar.swift */,
|
||||||
|
522242542BFC73E40085C632 /* TransitionContext.swift */,
|
||||||
|
522242552BFC73E40085C632 /* UIView+Container.swift */,
|
||||||
|
522242562BFC73E40085C632 /* UIViewController+Container.swift */,
|
||||||
|
522242572BFC73E40085C632 /* UIViewController+SideMenu.swift */,
|
||||||
|
);
|
||||||
|
path = SideMenu;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
523ED2512BDA2BC700CFED02 = {
|
523ED2512BDA2BC700CFED02 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -343,6 +394,7 @@
|
|||||||
523ED25C2BDA2BC700CFED02 /* WOKA */ = {
|
523ED25C2BDA2BC700CFED02 /* WOKA */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
525327D72BFCC30400F64283 /* TabBar & SideMenu */,
|
||||||
5259542C2BEA392A00191286 /* Alerts */,
|
5259542C2BEA392A00191286 /* Alerts */,
|
||||||
525954152BE8CAC900191286 /* Network Adapter */,
|
525954152BE8CAC900191286 /* Network Adapter */,
|
||||||
9CBCB2A62BE5104F007D7934 /* Home */,
|
9CBCB2A62BE5104F007D7934 /* Home */,
|
||||||
@@ -453,6 +505,48 @@
|
|||||||
path = Fonts;
|
path = Fonts;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
525327D12BFCC1BC00F64283 /* Model */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
);
|
||||||
|
path = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
525327D22BFCC1C400F64283 /* View */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
);
|
||||||
|
path = View;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
525327D32BFCC1C900F64283 /* ViewModel */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
525327D52BFCC23600F64283 /* SideMenuVM.swift */,
|
||||||
|
);
|
||||||
|
path = ViewModel;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
525327D42BFCC1CF00F64283 /* Controller */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9CBCB2A92BE51A52007D7934 /* HomeVC.swift */,
|
||||||
|
525327CF2BFCBC4A00F64283 /* ExploreWokaVC.swift */,
|
||||||
|
522242632BFC74380085C632 /* MyListVC.swift */,
|
||||||
|
);
|
||||||
|
path = Controller;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
525327D72BFCC30400F64283 /* TabBar & SideMenu */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
522242582BFC73E40085C632 /* SideMenu */,
|
||||||
|
522242652BFC74380085C632 /* TabBarVC.swift */,
|
||||||
|
522242692BFC7AFC0085C632 /* SideMenuVC.swift */,
|
||||||
|
);
|
||||||
|
path = "TabBar & SideMenu";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
525953CD2BE8B28100191286 /* ActivityToast&Indicator */ = {
|
525953CD2BE8B28100191286 /* ActivityToast&Indicator */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -585,6 +679,7 @@
|
|||||||
9C27E1622BDB6F1900EC1DA9 /* AuthFunc.swift */,
|
9C27E1622BDB6F1900EC1DA9 /* AuthFunc.swift */,
|
||||||
523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */,
|
523ED25D2BDA2BC700CFED02 /* AppDelegate.swift */,
|
||||||
523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */,
|
523ED25F2BDA2BC700CFED02 /* SceneDelegate.swift */,
|
||||||
|
525327D82BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift */,
|
||||||
);
|
);
|
||||||
path = Main;
|
path = Main;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -664,8 +759,11 @@
|
|||||||
9CBCB2A62BE5104F007D7934 /* Home */ = {
|
9CBCB2A62BE5104F007D7934 /* Home */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
525327D42BFCC1CF00F64283 /* Controller */,
|
||||||
|
525327D32BFCC1C900F64283 /* ViewModel */,
|
||||||
|
525327D22BFCC1C400F64283 /* View */,
|
||||||
|
525327D12BFCC1BC00F64283 /* Model */,
|
||||||
9CBCB2A72BE5105A007D7934 /* Home.storyboard */,
|
9CBCB2A72BE5105A007D7934 /* Home.storyboard */,
|
||||||
9CBCB2A92BE51A52007D7934 /* HomeVC.swift */,
|
|
||||||
);
|
);
|
||||||
path = Home;
|
path = Home;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -879,7 +977,9 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
52D774EF2BDFC50D001D87DE /* StringValidations.swift in Sources */,
|
52D774EF2BDFC50D001D87DE /* StringValidations.swift in Sources */,
|
||||||
|
5222425D2BFC73E40085C632 /* SideMenuController.swift in Sources */,
|
||||||
5272FCE32BDFDB05000ECB1D /* UserDetailsRegisterVC.swift in Sources */,
|
5272FCE32BDFDB05000ECB1D /* UserDetailsRegisterVC.swift in Sources */,
|
||||||
|
5222425E2BFC73E40085C632 /* StatusBar.swift in Sources */,
|
||||||
525954102BE8B72900191286 /* FontCustom.swift in Sources */,
|
525954102BE8B72900191286 /* FontCustom.swift in Sources */,
|
||||||
5202AAFE2BDF90590043B7BD /* TextFieldImage.swift in Sources */,
|
5202AAFE2BDF90590043B7BD /* TextFieldImage.swift in Sources */,
|
||||||
52FDDAB52BF34DC300E037C1 /* YesNoAlertVC.swift in Sources */,
|
52FDDAB52BF34DC300E037C1 /* YesNoAlertVC.swift in Sources */,
|
||||||
@@ -897,12 +997,15 @@
|
|||||||
9C27E1692BDB76F200EC1DA9 /* OnBoardVM.swift in Sources */,
|
9C27E1692BDB76F200EC1DA9 /* OnBoardVM.swift in Sources */,
|
||||||
523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */,
|
523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */,
|
||||||
9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */,
|
9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */,
|
||||||
|
525327D02BFCBC4A00F64283 /* ExploreWokaVC.swift in Sources */,
|
||||||
52C8B0542BDA4BD1003B51D0 /* RoundCorner.swift in Sources */,
|
52C8B0542BDA4BD1003B51D0 /* RoundCorner.swift in Sources */,
|
||||||
|
522242662BFC74380085C632 /* MyListVC.swift in Sources */,
|
||||||
5259542B2BEA292800191286 /* UserRegPostModel.swift in Sources */,
|
5259542B2BEA292800191286 /* UserRegPostModel.swift in Sources */,
|
||||||
52C8B0572BDA57DB003B51D0 /* Constant.swift in Sources */,
|
52C8B0572BDA57DB003B51D0 /* Constant.swift in Sources */,
|
||||||
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */,
|
5202AB012BDFA7900043B7BD /* EmailValidation.swift in Sources */,
|
||||||
525954192BE8CC3400191286 /* ConstantString.swift in Sources */,
|
525954192BE8CC3400191286 /* ConstantString.swift in Sources */,
|
||||||
52D774EB2BDFC0BF001D87DE /* OTPVC.swift in Sources */,
|
52D774EB2BDFC0BF001D87DE /* OTPVC.swift in Sources */,
|
||||||
|
5222425A2BFC73E40085C632 /* Delegate.swift in Sources */,
|
||||||
9C27E16F2BDB866500EC1DA9 /* CellIdentifier.swift in Sources */,
|
9C27E16F2BDB866500EC1DA9 /* CellIdentifier.swift in Sources */,
|
||||||
9C27E1632BDB6F1900EC1DA9 /* AuthFunc.swift in Sources */,
|
9C27E1632BDB6F1900EC1DA9 /* AuthFunc.swift in Sources */,
|
||||||
9C0A85412BEE35670093783D /* ResetPassUserNameVM.swift in Sources */,
|
9C0A85412BEE35670093783D /* ResetPassUserNameVM.swift in Sources */,
|
||||||
@@ -913,11 +1016,13 @@
|
|||||||
525954142BE8C87300191286 /* ExtensionVCToastAlert.swift in Sources */,
|
525954142BE8C87300191286 /* ExtensionVCToastAlert.swift in Sources */,
|
||||||
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */,
|
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */,
|
||||||
52D774ED2BDFC13F001D87DE /* OTPVM.swift in Sources */,
|
52D774ED2BDFC13F001D87DE /* OTPVM.swift in Sources */,
|
||||||
|
525327D62BFCC23600F64283 /* SideMenuVM.swift in Sources */,
|
||||||
9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */,
|
9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */,
|
||||||
52A3F6A52BECBA8D0000BB0B /* LinkedChildDM.swift in Sources */,
|
52A3F6A52BECBA8D0000BB0B /* LinkedChildDM.swift in Sources */,
|
||||||
52A3F6AB2BECBF550000BB0B /* LinkedChildVC.swift in Sources */,
|
52A3F6AB2BECBF550000BB0B /* LinkedChildVC.swift in Sources */,
|
||||||
9CBCB2A52BE50D49007D7934 /* NewPasswordVC.swift in Sources */,
|
9CBCB2A52BE50D49007D7934 /* NewPasswordVC.swift in Sources */,
|
||||||
9CBCB29F2BE4E13A007D7934 /* ValidatorClass.swift in Sources */,
|
9CBCB29F2BE4E13A007D7934 /* ValidatorClass.swift in Sources */,
|
||||||
|
522242592BFC73E40085C632 /* BasicTransitionAnimator.swift in Sources */,
|
||||||
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */,
|
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */,
|
||||||
9C56E83B2BDBC6E600E4CA14 /* SelectAgeVM.swift in Sources */,
|
9C56E83B2BDBC6E600E4CA14 /* SelectAgeVM.swift in Sources */,
|
||||||
5259542E2BEA393700191286 /* AlertCustomVC.swift in Sources */,
|
5259542E2BEA393700191286 /* AlertCustomVC.swift in Sources */,
|
||||||
@@ -938,6 +1043,8 @@
|
|||||||
52A3F6AF2BECC0690000BB0B /* LinkedChildVM.swift in Sources */,
|
52A3F6AF2BECC0690000BB0B /* LinkedChildVM.swift in Sources */,
|
||||||
525954252BE8F01600191286 /* ValueWrapper.swift in Sources */,
|
525954252BE8F01600191286 /* ValueWrapper.swift in Sources */,
|
||||||
52A3F6A82BECBF2A0000BB0B /* LinkedChildCell.swift in Sources */,
|
52A3F6A82BECBF2A0000BB0B /* LinkedChildCell.swift in Sources */,
|
||||||
|
522242622BFC73E40085C632 /* UIViewController+SideMenu.swift in Sources */,
|
||||||
|
5222425B2BFC73E40085C632 /* Preferences.swift in Sources */,
|
||||||
52C6E01E2BE3847F00E22D59 /* BorderView.swift in Sources */,
|
52C6E01E2BE3847F00E22D59 /* BorderView.swift in Sources */,
|
||||||
52C8B0742BDA7626003B51D0 /* OnBoardVC.swift in Sources */,
|
52C8B0742BDA7626003B51D0 /* OnBoardVC.swift in Sources */,
|
||||||
525953CF2BE8B28F00191286 /* Utilities.swift in Sources */,
|
525953CF2BE8B28F00191286 /* Utilities.swift in Sources */,
|
||||||
@@ -945,22 +1052,29 @@
|
|||||||
9C56E8482BDBEFAB00E4CA14 /* AssetColor.swift in Sources */,
|
9C56E8482BDBEFAB00E4CA14 /* AssetColor.swift in Sources */,
|
||||||
9C0A85432BEE3EC90093783D /* NewPasswordVM.swift in Sources */,
|
9C0A85432BEE3EC90093783D /* NewPasswordVM.swift in Sources */,
|
||||||
9C9BEEC72BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift in Sources */,
|
9C9BEEC72BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift in Sources */,
|
||||||
|
5222426A2BFC7AFC0085C632 /* SideMenuVC.swift in Sources */,
|
||||||
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */,
|
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */,
|
||||||
5272FCE52BDFDC8C000ECB1D /* UserDetailsRegisterVM.swift in Sources */,
|
5272FCE52BDFDC8C000ECB1D /* UserDetailsRegisterVM.swift in Sources */,
|
||||||
525954272BE9178F00191286 /* UserDataDM.swift in Sources */,
|
525954272BE9178F00191286 /* UserDataDM.swift in Sources */,
|
||||||
|
522242602BFC73E40085C632 /* UIView+Container.swift in Sources */,
|
||||||
|
522242612BFC73E40085C632 /* UIViewController+Container.swift in Sources */,
|
||||||
9C27E1652BDB6FBC00EC1DA9 /* StoryBoardID.swift in Sources */,
|
9C27E1652BDB6FBC00EC1DA9 /* StoryBoardID.swift in Sources */,
|
||||||
525954322BEA39D200191286 /* AddTapGesture.swift in Sources */,
|
525954322BEA39D200191286 /* AddTapGesture.swift in Sources */,
|
||||||
|
522242682BFC74380085C632 /* TabBarVC.swift in Sources */,
|
||||||
9C27E1722BDB86B600EC1DA9 /* OnBoardCell.swift in Sources */,
|
9C27E1722BDB86B600EC1DA9 /* OnBoardCell.swift in Sources */,
|
||||||
52C8B05F2BDA5AFA003B51D0 /* SplashVM.swift in Sources */,
|
52C8B05F2BDA5AFA003B51D0 /* SplashVM.swift in Sources */,
|
||||||
52663FF72BDFACF60001D8CE /* ShadowView.swift in Sources */,
|
52663FF72BDFACF60001D8CE /* ShadowView.swift in Sources */,
|
||||||
|
5222425F2BFC73E40085C632 /* TransitionContext.swift in Sources */,
|
||||||
52D774F12BDFC53B001D87DE /* StringSubScript.swift in Sources */,
|
52D774F12BDFC53B001D87DE /* StringSubScript.swift in Sources */,
|
||||||
52FB2D8F2BDF898F0009B0C7 /* TextFieldPadding.swift in Sources */,
|
52FB2D8F2BDF898F0009B0C7 /* TextFieldPadding.swift in Sources */,
|
||||||
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */,
|
5257B2652BDFB6F50086D79B /* CheckPhoneHomeBtnOrNotch.swift in Sources */,
|
||||||
52663FF92BDFAF110001D8CE /* EmailVM.swift in Sources */,
|
52663FF92BDFAF110001D8CE /* EmailVM.swift in Sources */,
|
||||||
|
5222425C2BFC73E40085C632 /* Segue.swift in Sources */,
|
||||||
525954342BEA620800191286 /* IntrestTopicDM.swift in Sources */,
|
525954342BEA620800191286 /* IntrestTopicDM.swift in Sources */,
|
||||||
52663FF52BDFAB830001D8CE /* TextFieldErrorView.swift in Sources */,
|
52663FF52BDFAB830001D8CE /* TextFieldErrorView.swift in Sources */,
|
||||||
9C27E16D2BDB852F00EC1DA9 /* GVar.swift in Sources */,
|
9C27E16D2BDB852F00EC1DA9 /* GVar.swift in Sources */,
|
||||||
9C56E8462BDBEE6400E4CA14 /* EmailVC.swift in Sources */,
|
9C56E8462BDBEE6400E4CA14 /* EmailVC.swift in Sources */,
|
||||||
|
525327D92BFCDDF700F64283 /* AuthFuncStartupSoundHandling.swift in Sources */,
|
||||||
52663FFB2BDFB1700001D8CE /* TextFieldShadow.swift in Sources */,
|
52663FFB2BDFB1700001D8CE /* TextFieldShadow.swift in Sources */,
|
||||||
52C6E0212BE3ADE300E22D59 /* GenderEnum.swift in Sources */,
|
52C6E0212BE3ADE300E22D59 /* GenderEnum.swift in Sources */,
|
||||||
525953D12BE8B2B200191286 /* LLSpinner.swift in Sources */,
|
525953D12BE8B2B200191286 /* LLSpinner.swift in Sources */,
|
||||||
|
|||||||
24
WOKA/Assets/Assets.xcassets/Menu/CloseIcon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "icons8-cancel (1).png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"template-rendering-intent" : "template"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/CloseIcon.imageset/icons8-cancel (1).png
vendored
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
6
WOKA/Assets/Assets.xcassets/Menu/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
26
WOKA/Assets/Assets.xcassets/Menu/ExploreWoka.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "woka-icon copy.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "woka-icon copy@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "woka-icon copy@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"template-rendering-intent" : "original"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/ExploreWoka.imageset/woka-icon copy.png
vendored
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/ExploreWoka.imageset/woka-icon copy@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/ExploreWoka.imageset/woka-icon copy@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 13 KiB |
23
WOKA/Assets/Assets.xcassets/Menu/HeartIcon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "icons8-heart.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "icons8-heart@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "icons8-heart@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/HeartIcon.imageset/icons8-heart.png
vendored
Normal file
|
After Width: | Height: | Size: 644 B |
BIN
WOKA/Assets/Assets.xcassets/Menu/HeartIcon.imageset/icons8-heart@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/HeartIcon.imageset/icons8-heart@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1005 B |
23
WOKA/Assets/Assets.xcassets/Menu/HomeIcon.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "icons8-home.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "icons8-home@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "icons8-home@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/HomeIcon.imageset/icons8-home.png
vendored
Normal file
|
After Width: | Height: | Size: 878 B |
BIN
WOKA/Assets/Assets.xcassets/Menu/HomeIcon.imageset/icons8-home@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/HomeIcon.imageset/icons8-home@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 914 B |
26
WOKA/Assets/Assets.xcassets/Menu/SideMenu.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Group 3.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Group 3@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Group 3@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"template-rendering-intent" : "original"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/SideMenu.imageset/Group 3.png
vendored
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/SideMenu.imageset/Group 3@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/SideMenu.imageset/Group 3@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
23
WOKA/Assets/Assets.xcassets/Menu/Theme1.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Mask group (1).png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Mask group (1)@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Mask group (1)@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme1.imageset/Mask group (1).png
vendored
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme1.imageset/Mask group (1)@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme1.imageset/Mask group (1)@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 192 KiB |
23
WOKA/Assets/Assets.xcassets/Menu/Theme2.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Mask group.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Mask group@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Mask group@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme2.imageset/Mask group.png
vendored
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme2.imageset/Mask group@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
WOKA/Assets/Assets.xcassets/Menu/Theme2.imageset/Mask group@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 246 KiB |
21
WOKA/Assets/Assets.xcassets/Menu/new.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Screenshot 2024-05-15 at 5.14.58 PM.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Menu/new.imageset/Screenshot 2024-05-15 at 5.14.58 PM.png
vendored
Normal file
|
After Width: | Height: | Size: 603 KiB |
@@ -3,7 +3,7 @@
|
|||||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
@@ -43,25 +43,25 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="wZZ-TW-F7M">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="wZZ-TW-F7M">
|
||||||
<rect key="frame" x="20" y="172.5" width="374" height="203.5"/>
|
<rect key="frame" x="20" y="172.5" width="374" height="202"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Let’s be Safe!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yPx-mT-kaf" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Let’s be Safe!" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yPx-mT-kaf" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="354" height="34"/>
|
<rect key="frame" x="10" y="0.0" width="354" height="33"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="xww-d1-beY">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="xww-d1-beY">
|
||||||
<rect key="frame" x="10" y="104" width="354" height="99.5"/>
|
<rect key="frame" x="10" y="103" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CAN WE HAVE YOUR PARENT’S EMAIL?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="STc-F9-ORA">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CAN WE HAVE YOUR PARENT’S EMAIL?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="STc-F9-ORA">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="useless@yopmail.com" placeholder="Enter your email" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DSB-Ge-wNO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="useless@yopmail.com" placeholder="Enter your email" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="DSB-Ge-wNO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JHJ-Zh-JC5">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JHJ-Zh-JC5">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -91,16 +91,16 @@
|
|||||||
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="kWC-4v-p9x">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="kWC-4v-p9x">
|
||||||
<rect key="frame" x="30" y="740" width="354" height="102"/>
|
<rect key="frame" x="30" y="740.5" width="354" height="101.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will send a verification code to their email" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lqT-ZV-x5p" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will send a verification code to their email" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lqT-ZV-x5p" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="17"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="16.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zNR-RE-Ax8" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zNR-RE-Ax8" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="52" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="51.5" width="354" height="50"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="4eR-zk-hWT"/>
|
<constraint firstAttribute="height" constant="50" id="4eR-zk-hWT"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -167,10 +167,10 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="mhH-Ov-1nU">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="mhH-Ov-1nU">
|
||||||
<rect key="frame" x="20" y="172.5" width="374" height="281.5"/>
|
<rect key="frame" x="20" y="172.5" width="374" height="278.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NYC-6J-drr" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NYC-6J-drr" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="354" height="67.5"/>
|
<rect key="frame" x="10" y="0.0" width="354" height="65.5"/>
|
||||||
<string key="text">Please Get the Code
|
<string key="text">Please Get the Code
|
||||||
Sent to Your Parent’s Email</string>
|
Sent to Your Parent’s Email</string>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
||||||
@@ -178,16 +178,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="dF8-rD-e8F">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="dF8-rD-e8F">
|
||||||
<rect key="frame" x="10" y="137.5" width="354" height="144"/>
|
<rect key="frame" x="10" y="135.5" width="354" height="143"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEASE ENTER THE CODE" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tB6-Qz-8Ez" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEASE ENTER THE CODE" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tB6-Qz-8Ez" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="HGA-bw-mMW">
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="HGA-bw-mMW">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="60"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="60"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="*" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="81S-Fa-CiD" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="*" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="81S-Fa-CiD" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="81" height="60"/>
|
<rect key="frame" x="0.0" y="0.0" width="81" height="60"/>
|
||||||
@@ -223,13 +223,13 @@ Sent to Your Parent’s Email</string>
|
|||||||
</constraints>
|
</constraints>
|
||||||
</stackView>
|
</stackView>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="OTP is valid for 10:00 Min" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WcL-Rp-jOq" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="OTP is valid for 10:00 Min" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WcL-Rp-jOq" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="109.5" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="109" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KX4-Ip-eii" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KX4-Ip-eii" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="136.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="135.5" width="354" height="0.0"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<state key="normal" title="Button"/>
|
<state key="normal" title="Button"/>
|
||||||
<buttonConfiguration key="configuration" style="plain">
|
<buttonConfiguration key="configuration" style="plain">
|
||||||
@@ -247,7 +247,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dt3-hg-7T4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dt3-hg-7T4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="144" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="143" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -258,16 +258,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="xga-nK-9qJ">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="xga-nK-9qJ">
|
||||||
<rect key="frame" x="30" y="723" width="354" height="119"/>
|
<rect key="frame" x="30" y="724" width="354" height="118"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Request them for the verfication code to activate your account" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M3r-lS-DmW" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Request them for the verfication code to activate your account" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M3r-lS-DmW" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="34"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="33"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vVW-Kz-YaV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vVW-Kz-YaV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="69" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="68" width="354" height="50"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="KmJ-vu-pxT"/>
|
<constraint firstAttribute="height" constant="50" id="KmJ-vu-pxT"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -339,28 +339,28 @@ Sent to Your Parent’s Email</string>
|
|||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="L80-bN-1T0">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="L80-bN-1T0">
|
||||||
<rect key="frame" x="20" y="172.5" width="374" height="510.5"/>
|
<rect key="frame" x="20" y="172.5" width="374" height="506.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Great! Now Let’s Create Your WOKAccount" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3x2-kd-tL1" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Great! Now Let’s Create Your WOKAccount" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3x2-kd-tL1" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="354" height="65"/>
|
<rect key="frame" x="10" y="0.0" width="354" height="63"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="27"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="27"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="bJs-H6-708">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="bJs-H6-708">
|
||||||
<rect key="frame" x="10" y="135" width="354" height="375.5"/>
|
<rect key="frame" x="10" y="133" width="354" height="373.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="LUQ-BX-nHw">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="LUQ-BX-nHw">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="99.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SELECT USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w7B-kJ-IgM" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SELECT USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w7B-kJ-IgM" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="m50-FZ-yVO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="m50-FZ-yVO" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -379,7 +379,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RuI-5z-pyW">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RuI-5z-pyW">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -387,16 +387,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="qSD-g5-OZA">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="qSD-g5-OZA">
|
||||||
<rect key="frame" x="0.0" y="129.5" width="354" height="99.5"/>
|
<rect key="frame" x="0.0" y="129" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WHAT’S YOUR NAME?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eZm-zl-55m" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WHAT’S YOUR NAME?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eZm-zl-55m" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your name" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="tgW-LH-XfR" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your name" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="tgW-LH-XfR" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -415,7 +415,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y3K-h2-Gbg">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y3K-h2-Gbg">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -423,16 +423,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="hWX-C0-soL">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="hWX-C0-soL">
|
||||||
<rect key="frame" x="0.0" y="259" width="354" height="116.5"/>
|
<rect key="frame" x="0.0" y="258" width="354" height="115.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CREATE YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Fev-AX-lcQ" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CREATE YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Fev-AX-lcQ" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4gw-z0-s4a" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4gw-z0-s4a" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -451,7 +451,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Shh!! Don’t share your password with anyone." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3LF-iY-Hoi" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Shh!! Don’t share your password with anyone." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3LF-iY-Hoi" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="17"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="16.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -829,35 +829,35 @@ Sent to Your Parent’s Email</string>
|
|||||||
<rect key="frame" x="0.0" y="107.5" width="414" height="754.5"/>
|
<rect key="frame" x="0.0" y="107.5" width="414" height="754.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="aNK-S5-pik">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="aNK-S5-pik">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="763.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="414" height="760"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y9q-mR-AlW">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y9q-mR-AlW">
|
||||||
<rect key="frame" x="20" y="0.0" width="374" height="60"/>
|
<rect key="frame" x="20" y="0.0" width="374" height="60"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</view>
|
</view>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Krs-Zs-R6t">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Krs-Zs-R6t">
|
||||||
<rect key="frame" x="20" y="60" width="374" height="447.5"/>
|
<rect key="frame" x="20" y="60" width="374" height="445"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Login to WOKA" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1T4-5K-cXT" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Login to WOKA" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1T4-5K-cXT" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="32.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="31.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-ExtraBold" family="Exo 2" pointSize="27"/>
|
<fontDescription key="fontDescription" name="Exo2-ExtraBold" family="Exo 2" pointSize="27"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="EhK-1C-Xey">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="EhK-1C-Xey">
|
||||||
<rect key="frame" x="0.0" y="102.5" width="374" height="345"/>
|
<rect key="frame" x="0.0" y="101.5" width="374" height="343.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="krT-0d-tCQ">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="krT-0d-tCQ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="99.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Xc-wy-9mu" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Xc-wy-9mu" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="68c-1b-KSI" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="68c-1b-KSI" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="374" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="374" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -876,7 +876,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JQm-yr-A2M">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JQm-yr-A2M">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="374" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="374" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -884,19 +884,19 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="fVp-fO-1fH">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="fVp-fO-1fH">
|
||||||
<rect key="frame" x="0.0" y="129.5" width="374" height="135.5"/>
|
<rect key="frame" x="0.0" y="129" width="374" height="134.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="ebQ-va-83Q">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="ebQ-va-83Q">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="99.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BcT-5f-ded" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BcT-5f-ded" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iJE-dm-qal" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iJE-dm-qal" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="374" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="374" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -915,7 +915,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2YT-HL-ug7">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2YT-HL-ug7">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="374" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="374" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -923,7 +923,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yp6-2q-OZC" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yp6-2q-OZC" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="104.5" width="374" height="31"/>
|
<rect key="frame" x="0.0" y="104" width="374" height="30.5"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<state key="normal" title="Button"/>
|
<state key="normal" title="Button"/>
|
||||||
<buttonConfiguration key="configuration" style="plain" title="Forgot Password">
|
<buttonConfiguration key="configuration" style="plain" title="Forgot Password">
|
||||||
@@ -936,7 +936,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OFt-kx-VfD" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OFt-kx-VfD" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="295" width="374" height="50"/>
|
<rect key="frame" x="0.0" y="293.5" width="374" height="50"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="Tle-PZ-1B4"/>
|
<constraint firstAttribute="height" constant="50" id="Tle-PZ-1B4"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -955,14 +955,14 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOZ-1S-7K5">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOZ-1S-7K5">
|
||||||
<rect key="frame" x="20" y="507.5" width="374" height="120"/>
|
<rect key="frame" x="20" y="505" width="374" height="120"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</view>
|
</view>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Nnb-iQ-OQs">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Nnb-iQ-OQs">
|
||||||
<rect key="frame" x="20" y="627.5" width="374" height="106"/>
|
<rect key="frame" x="20" y="625" width="374" height="105"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ly3-jW-G7X" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ly3-jW-G7X" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="36"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="35"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<state key="normal" title="Button"/>
|
<state key="normal" title="Button"/>
|
||||||
<buttonConfiguration key="configuration" style="plain" title="Continue as a Guest">
|
<buttonConfiguration key="configuration" style="plain" title="Continue as a Guest">
|
||||||
@@ -973,7 +973,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TYc-dA-ZOV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TYc-dA-ZOV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="56" width="374" height="50"/>
|
<rect key="frame" x="0.0" y="55" width="374" height="50"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="sfz-a2-WZy"/>
|
<constraint firstAttribute="height" constant="50" id="sfz-a2-WZy"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -990,7 +990,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sb4-yj-JJ2">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sb4-yj-JJ2">
|
||||||
<rect key="frame" x="20" y="733.5" width="374" height="30"/>
|
<rect key="frame" x="20" y="730" width="374" height="30"/>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="30" id="RxX-pL-7Ux"/>
|
<constraint firstAttribute="height" constant="30" id="RxX-pL-7Ux"/>
|
||||||
@@ -1059,25 +1059,25 @@ Sent to Your Parent’s Email</string>
|
|||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Pjf-i3-BcY">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Pjf-i3-BcY">
|
||||||
<rect key="frame" x="20" y="172.5" width="374" height="203.5"/>
|
<rect key="frame" x="20" y="172.5" width="374" height="202"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Forgot your Password?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i7M-Ob-pCE" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Forgot your Password?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i7M-Ob-pCE" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="354" height="34"/>
|
<rect key="frame" x="10" y="0.0" width="354" height="33"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Jlq-Ct-Mrz">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Jlq-Ct-Mrz">
|
||||||
<rect key="frame" x="10" y="104" width="354" height="99.5"/>
|
<rect key="frame" x="10" y="103" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEASE GIVE US YOUR USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCB-jL-yE4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEASE GIVE US YOUR USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCB-jL-yE4" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="wy2-0C-rxG" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="wy2-0C-rxG" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -1096,7 +1096,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0ps-Ku-87z">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0ps-Ku-87z">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -1107,16 +1107,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="NPA-IJ-SA5">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="NPA-IJ-SA5">
|
||||||
<rect key="frame" x="30" y="740" width="354" height="102"/>
|
<rect key="frame" x="30" y="740.5" width="354" height="101.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will send a reset code to their email" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uv4-iY-Z87" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will send a reset code to their email" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uv4-iY-Z87" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="17"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="16.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JJ0-wA-EP6" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JJ0-wA-EP6" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="52" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="51.5" width="354" height="50"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="50" id="I7D-T4-sU1"/>
|
<constraint firstAttribute="height" constant="50" id="I7D-T4-sU1"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -1179,28 +1179,28 @@ Sent to Your Parent’s Email</string>
|
|||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="ph5-wC-m3B">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="ph5-wC-m3B">
|
||||||
<rect key="frame" x="20" y="172.5" width="374" height="341.5"/>
|
<rect key="frame" x="20" y="172.5" width="374" height="339.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Great! Select New Password" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QGk-Uc-mER" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Great! Select New Password" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QGk-Uc-mER" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="10" y="0.0" width="354" height="32.5"/>
|
<rect key="frame" x="10" y="0.0" width="354" height="31.5"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="27"/>
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="27"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="40" translatesAutoresizingMaskIntoConstraints="NO" id="qzU-f1-tq1">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="40" translatesAutoresizingMaskIntoConstraints="NO" id="qzU-f1-tq1">
|
||||||
<rect key="frame" x="10" y="102.5" width="354" height="239"/>
|
<rect key="frame" x="10" y="101.5" width="354" height="238"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="1na-3A-stg">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="1na-3A-stg">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="99.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CREATE YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hYw-Vc-C9h">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CREATE YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hYw-Vc-C9h">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter new password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Skx-Ig-91N" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter new password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Skx-Ig-91N" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -1219,7 +1219,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ht0-v3-TeN">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ht0-v3-TeN">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -1227,16 +1227,16 @@ Sent to Your Parent’s Email</string>
|
|||||||
</subviews>
|
</subviews>
|
||||||
</stackView>
|
</stackView>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Rwa-zV-eg9">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Rwa-zV-eg9">
|
||||||
<rect key="frame" x="0.0" y="139.5" width="354" height="99.5"/>
|
<rect key="frame" x="0.0" y="139" width="354" height="99"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CONFIRM YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6LZ-Ed-gCK">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CONFIRM YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6LZ-Ed-gCK">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="confirm your password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="JRR-Bk-5UP" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="confirm your password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="JRR-Bk-5UP" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
|
<rect key="frame" x="0.0" y="34" width="354" height="50"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<color key="tintColor" name="TextDarkBlue"/>
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@@ -1255,7 +1255,7 @@ Sent to Your Parent’s Email</string>
|
|||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B3H-EX-OA7">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B3H-EX-OA7">
|
||||||
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
<rect key="frame" x="0.0" y="99" width="354" height="0.0"/>
|
||||||
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -1414,43 +1414,43 @@ Sent to Your Parent’s Email</string>
|
|||||||
</scenes>
|
</scenes>
|
||||||
<designables>
|
<designables>
|
||||||
<designable name="42K-Uu-lPQ">
|
<designable name="42K-Uu-lPQ">
|
||||||
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
<size key="intrinsicContentSize" width="6.5" height="22.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="4gw-z0-s4a">
|
<designable name="4gw-z0-s4a">
|
||||||
<size key="intrinsicContentSize" width="200.5" height="20"/>
|
<size key="intrinsicContentSize" width="198" height="19"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="68c-1b-KSI">
|
<designable name="68c-1b-KSI">
|
||||||
<size key="intrinsicContentSize" width="201.5" height="21"/>
|
<size key="intrinsicContentSize" width="199" height="20.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="81S-Fa-CiD">
|
<designable name="81S-Fa-CiD">
|
||||||
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
<size key="intrinsicContentSize" width="6.5" height="22.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="DSB-Ge-wNO">
|
<designable name="DSB-Ge-wNO">
|
||||||
<size key="intrinsicContentSize" width="210" height="21"/>
|
<size key="intrinsicContentSize" width="209" height="20.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="Hcd-Mm-IxW">
|
<designable name="Hcd-Mm-IxW">
|
||||||
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
<size key="intrinsicContentSize" width="6.5" height="22.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="JRR-Bk-5UP">
|
<designable name="JRR-Bk-5UP">
|
||||||
<size key="intrinsicContentSize" width="218" height="20"/>
|
<size key="intrinsicContentSize" width="214.5" height="19"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="MpT-bm-drv">
|
<designable name="MpT-bm-drv">
|
||||||
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
<size key="intrinsicContentSize" width="6.5" height="22.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="Skx-Ig-91N">
|
<designable name="Skx-Ig-91N">
|
||||||
<size key="intrinsicContentSize" width="199" height="20"/>
|
<size key="intrinsicContentSize" width="196.5" height="19"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="iJE-dm-qal">
|
<designable name="iJE-dm-qal">
|
||||||
<size key="intrinsicContentSize" width="200.5" height="20"/>
|
<size key="intrinsicContentSize" width="198" height="19"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="m50-FZ-yVO">
|
<designable name="m50-FZ-yVO">
|
||||||
<size key="intrinsicContentSize" width="201.5" height="21"/>
|
<size key="intrinsicContentSize" width="199" height="20.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="tgW-LH-XfR">
|
<designable name="tgW-LH-XfR">
|
||||||
<size key="intrinsicContentSize" width="169.5" height="21"/>
|
<size key="intrinsicContentSize" width="168" height="20.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
<designable name="wy2-0C-rxG">
|
<designable name="wy2-0C-rxG">
|
||||||
<size key="intrinsicContentSize" width="201.5" height="21"/>
|
<size key="intrinsicContentSize" width="199" height="20.5"/>
|
||||||
</designable>
|
</designable>
|
||||||
</designables>
|
</designables>
|
||||||
<resources>
|
<resources>
|
||||||
|
|||||||
@@ -166,7 +166,11 @@ class LoginVM{
|
|||||||
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
||||||
case 1:
|
case 1:
|
||||||
Utilities.dismissProgressHUD()
|
Utilities.dismissProgressHUD()
|
||||||
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2)
|
self.vc.toast(msg: data.message ?? "Unrecognised error" , time: 2) {
|
||||||
|
let sb1 = UIStoryboard(name: "Home", bundle: nil)
|
||||||
|
let vc1 = sb1.instantiateViewController(withIdentifier: "SideMenu") as! SideMenuController
|
||||||
|
self.vc.navigationController?.pushViewController(vc1, animated: true)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
38
WOKA/Home/Controller/ExploreWokaVC.swift
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// ExploreWokaVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 21/05/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class ExploreWokaVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var blurView: UIView!
|
||||||
|
@IBOutlet weak var extraView: UIView!
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
drawBackgroundBlur()
|
||||||
|
// Do any additional setup after loading the view.
|
||||||
|
}
|
||||||
|
|
||||||
|
func drawBackgroundBlur() {
|
||||||
|
let blurEffect = UIBlurEffect(style: .light)
|
||||||
|
let blurredView = UIVisualEffectView(effect: blurEffect)
|
||||||
|
blurredView.frame = self.view.bounds
|
||||||
|
blurredView.alpha = 0.95
|
||||||
|
self.extraView.addSubview(blurredView)
|
||||||
|
|
||||||
|
let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect)
|
||||||
|
let vibrancyView = UIVisualEffectView(effect: vibrancyEffect)
|
||||||
|
vibrancyView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
vibrancyView.contentView.addSubview(blurView)
|
||||||
|
blurredView.contentView.addSubview(vibrancyView)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func closeTapped(_ sender: UIButton) {
|
||||||
|
self.dismiss(animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
47
WOKA/Home/Controller/HomeVC.swift
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
//
|
||||||
|
// HomeVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 03/05/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class HomeVC: UIViewController {
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
// Do any additional setup after loading the view.
|
||||||
|
customizeTabBarItemIconSize()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define a function to customize tab bar item icon size
|
||||||
|
func customizeTabBarItemIconSize() {
|
||||||
|
// Get a reference to the tab bar controller
|
||||||
|
if let tabBarController = self.tabBarController {
|
||||||
|
// Loop through each tab bar item
|
||||||
|
for item in tabBarController.tabBar.items! {
|
||||||
|
// Adjust the image insets to increase the icon size
|
||||||
|
item.imageInsets = UIEdgeInsets(top: 2, left: -5, bottom: -8, right: -5)
|
||||||
|
item.titlePositionAdjustment.vertical = CGFloat(8)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func barButtonTapped(_ sender: UIButton) {
|
||||||
|
self.sideMenuController?.revealMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class NavigationController: UINavigationController {
|
||||||
|
|
||||||
|
open override var childForStatusBarHidden: UIViewController? {
|
||||||
|
return self.topViewController
|
||||||
|
}
|
||||||
|
|
||||||
|
open override var childForStatusBarStyle: UIViewController? {
|
||||||
|
return self.topViewController
|
||||||
|
}
|
||||||
|
}
|
||||||
19
WOKA/Home/Controller/MyListVC.swift
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// MyListVC.swift
|
||||||
|
//
|
||||||
|
// Created by Bilal on 19/05/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class MyListVC: UIViewController {
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
}
|
||||||
|
@IBAction func sideBarBtnTapped(_ sender: UIButton) {
|
||||||
|
self.sideMenuController?.revealMenu()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,33 +1,615 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="jHz-IY-SVp">
|
||||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="Exo2-Bold.ttf">
|
||||||
|
<string>Exo2-Bold</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
<scenes>
|
<scenes>
|
||||||
<!--View Controller-->
|
<!--Side Menu Controller-->
|
||||||
<scene sceneID="s0d-6b-0kx">
|
<scene sceneID="XCR-DI-hN2">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="Y6W-OH-hqX" sceneMemberID="viewController">
|
<viewController storyboardIdentifier="SideMenu" id="jHz-IY-SVp" customClass="SideMenuController" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
|
<view key="view" contentMode="scaleToFill" id="10X-qX-Sn2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
|
<viewLayoutGuide key="safeArea" id="Nz1-M4-ahP"/>
|
||||||
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="contentSegueID" value="SideMenuContent"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</view>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="contentSegueID" value="SideMenuContent"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
<connections>
|
||||||
|
<segue destination="XPN-2R-lh2" kind="custom" identifier="SideMenuContent" customClass="SideMenuSegue" customModule="WOKA" customModuleProvider="target" id="Ga5-77-IlS"/>
|
||||||
|
<segue destination="yYJ-KT-PYn" kind="custom" identifier="SideMenu.Menu" customClass="SideMenuSegue" customModule="WOKA" customModuleProvider="target" id="H5r-n7-o6k"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="0Oq-zh-yA1" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-180" y="195"/>
|
||||||
|
</scene>
|
||||||
|
<!--Navigation Controller-->
|
||||||
|
<scene sceneID="Cia-vt-MF2">
|
||||||
|
<objects>
|
||||||
|
<navigationController storyboardIdentifier="ContentNavigation" automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="XPN-2R-lh2" customClass="NavigationController" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="gYe-fj-SXZ">
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</navigationBar>
|
||||||
|
<nil name="viewControllers"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="FME-2B-5e1" kind="relationship" relationship="rootViewController" id="qn9-Qw-SEU"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="ldr-Oq-tRk" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="796" y="195"/>
|
||||||
|
</scene>
|
||||||
|
<!--Side MenuVC-->
|
||||||
|
<scene sceneID="Tmo-uj-7vp">
|
||||||
|
<objects>
|
||||||
|
<viewController id="yYJ-KT-PYn" customClass="SideMenuVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" clipsSubviews="YES" contentMode="scaleToFill" id="qHL-AI-7IP">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iqc-o5-ovk">
|
||||||
|
<rect key="frame" x="114" y="48" width="300" height="814"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="t37-ec-QfF">
|
||||||
|
<rect key="frame" x="0.0" y="20" width="300" height="962.5"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xny-eg-3V4">
|
||||||
|
<rect key="frame" x="25" y="0.0" width="260" height="30"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="oX8-tK-cUr">
|
||||||
|
<rect key="frame" x="230" y="0.0" width="30" height="30"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="oX8-tK-cUr" secondAttribute="height" multiplier="1:1" id="iC5-te-siA"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" image="xmark" catalog="system"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="closeBtnTapped:" destination="yYJ-KT-PYn" eventType="touchUpInside" id="YnK-P6-7G4"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="oX8-tK-cUr" firstAttribute="top" secondItem="Xny-eg-3V4" secondAttribute="top" id="NUv-CQ-TZX"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="oX8-tK-cUr" secondAttribute="bottom" id="Yoq-Og-pVk"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="oX8-tK-cUr" secondAttribute="trailing" id="iOf-dq-2OF"/>
|
||||||
|
<constraint firstAttribute="height" constant="30" id="lnK-6r-Ard"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="RkV-jH-yAB">
|
||||||
|
<rect key="frame" x="25" y="60" width="260" height="186.5"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Wst-a7-Npy">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="240" height="90"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HcQ-Ty-2GV">
|
||||||
|
<rect key="frame" x="75" y="0.0" width="90" height="90"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ExploreWoka" translatesAutoresizingMaskIntoConstraints="NO" id="9zy-xC-ddd">
|
||||||
|
<rect key="frame" x="10" y="10" width="70" height="70"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="9zy-xC-ddd" firstAttribute="leading" secondItem="HcQ-Ty-2GV" secondAttribute="leading" constant="10" id="BTl-hT-QCb"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="HcQ-Ty-2GV" secondAttribute="height" multiplier="1:1" id="H37-O7-73G"/>
|
||||||
|
<constraint firstItem="9zy-xC-ddd" firstAttribute="top" secondItem="HcQ-Ty-2GV" secondAttribute="top" constant="10" id="ZM0-He-gFp"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="9zy-xC-ddd" secondAttribute="trailing" constant="10" id="blZ-OX-VGa"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="9zy-xC-ddd" secondAttribute="bottom" constant="10" id="tTs-WE-tXn"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="HcQ-Ty-2GV" secondAttribute="bottom" id="7QR-fz-otU"/>
|
||||||
|
<constraint firstAttribute="height" constant="90" id="Gij-cf-tNU"/>
|
||||||
|
<constraint firstItem="HcQ-Ty-2GV" firstAttribute="top" secondItem="Wst-a7-Npy" secondAttribute="top" id="Wpr-Vz-HNd"/>
|
||||||
|
<constraint firstItem="HcQ-Ty-2GV" firstAttribute="centerX" secondItem="Wst-a7-Npy" secondAttribute="centerX" id="n4m-1f-Jwj"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Hi, Bilal Khan!" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="suo-d0-ZWN">
|
||||||
|
<rect key="frame" x="75" y="105" width="110" height="21.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" adjustsImageSizeForAccessibilityContentSizeCategory="YES" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mCq-h5-pMf">
|
||||||
|
<rect key="frame" x="20" y="141.5" width="220" height="45"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="45" id="16m-fq-Z3J"/>
|
||||||
|
<constraint firstAttribute="width" constant="220" id="6bB-0m-7ah"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="LOGOUT">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="FFp-2S-Idg" userLabel="THEME">
|
||||||
|
<rect key="frame" x="25" y="276.5" width="260" height="189.5"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="THEME" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="97O-hX-edI">
|
||||||
|
<rect key="frame" x="103.5" y="0.0" width="53.5" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="NLo-Lc-0nk">
|
||||||
|
<rect key="frame" x="0.0" y="29.5" width="260" height="160"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Theme1" translatesAutoresizingMaskIntoConstraints="NO" id="5Wh-aJ-q5B">
|
||||||
|
<rect key="frame" x="20" y="0.0" width="100" height="160"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||||
|
<integer key="value" value="10"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Theme2" translatesAutoresizingMaskIntoConstraints="NO" id="nAY-LD-xxC">
|
||||||
|
<rect key="frame" x="140" y="0.0" width="100" height="160"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||||
|
<integer key="value" value="10"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="160" id="VeD-Hj-aCo"/>
|
||||||
|
</constraints>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="20" bottom="0.0" right="20"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="17" translatesAutoresizingMaskIntoConstraints="NO" id="VRZ-To-5iq">
|
||||||
|
<rect key="frame" x="25" y="496" width="260" height="80"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2Ss-sF-9JC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="260" height="0.5"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="0.5" id="vD2-0c-MGR"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="czq-AM-ets">
|
||||||
|
<rect key="frame" x="0.0" y="17.5" width="260" height="45"/>
|
||||||
|
<subviews>
|
||||||
|
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="dR3-t9-4tw" customClass="CustomizableSegmentControl" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="230" height="46"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="45" id="S0T-Zr-FUt"/>
|
||||||
|
</constraints>
|
||||||
|
<segments>
|
||||||
|
<segment title="ENGLISH"/>
|
||||||
|
<segment title="हिन्दी"/>
|
||||||
|
</segments>
|
||||||
|
<color key="selectedSegmentTintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</segmentedControl>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uY8-gn-7UA">
|
||||||
|
<rect key="frame" x="230" y="0.0" width="30" height="45"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="30" id="LE3-he-Y3K"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5fV-UP-f4i">
|
||||||
|
<rect key="frame" x="0.0" y="79.5" width="260" height="0.5"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="0.5" id="EFi-kk-SIB"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="NlR-Il-Kw6">
|
||||||
|
<rect key="frame" x="25" y="606" width="260" height="192"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="27K-dP-rLv">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="105" height="32"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="heavy" pointSize="16"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="About WOKA"/>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dMJ-DD-Y51">
|
||||||
|
<rect key="frame" x="0.0" y="40" width="42" height="32"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="heavy" pointSize="16"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="FAQs"/>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ddH-0C-3Sq">
|
||||||
|
<rect key="frame" x="0.0" y="80" width="121" height="32"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="heavy" pointSize="16"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="WOKA Support"/>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RpR-2h-L0h">
|
||||||
|
<rect key="frame" x="0.0" y="120" width="81" height="32"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="heavy" pointSize="16"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="My Profile"/>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iGj-UB-KrW">
|
||||||
|
<rect key="frame" x="0.0" y="160" width="149" height="32"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="heavy" pointSize="16"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="Add Child Account"/>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="eEN-Gz-Lba">
|
||||||
|
<rect key="frame" x="25" y="828" width="260" height="134.5"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kdd-R6-VSK">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="260" height="0.5"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="0.5" id="zNf-t1-EI9"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" translatesAutoresizingMaskIntoConstraints="NO" id="0mL-Ab-I52">
|
||||||
|
<rect key="frame" x="0.0" y="15.5" width="260" height="20"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="sgm-gC-aUu">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="255" height="20"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2fp-NZ-TkX">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="121" height="20"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="Terms & Condition"/>
|
||||||
|
</button>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aK7-70-qf3">
|
||||||
|
<rect key="frame" x="141" y="0.0" width="1" height="20"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="1" id="wXs-wg-54j"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ASm-Yq-13l">
|
||||||
|
<rect key="frame" x="162" y="0.0" width="93" height="20"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="Privacy Policy"/>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="20" id="XEZ-Ii-k3r"/>
|
||||||
|
</constraints>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Xs-es-ydw">
|
||||||
|
<rect key="frame" x="0.0" y="50.5" width="260" height="0.5"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="0.5" id="yVw-Ap-vAS"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" translatesAutoresizingMaskIntoConstraints="NO" id="ALy-fb-Zww">
|
||||||
|
<rect key="frame" x="0.0" y="66" width="260" height="20"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DDe-vK-Hd2">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="71" height="20"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="20" id="jJE-ie-aRq"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="14"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" title="Disclaimer"/>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KGD-q6-IV3">
|
||||||
|
<rect key="frame" x="0.0" y="101" width="260" height="0.5"/>
|
||||||
|
<color key="backgroundColor" red="0.34901960780000002" green="0.81568627449999997" blue="0.99607843139999996" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="0.5" id="qFj-5C-IvH"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="8Nc-DS-Cyi">
|
||||||
|
<rect key="frame" x="0.0" y="116.5" width="260" height="18"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WOKA Creations PVT LTD" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fMz-tw-JjQ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="178" height="18"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VER 25.5" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bOt-Ov-fli">
|
||||||
|
<rect key="frame" x="197.5" y="0.0" width="62.5" height="18"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="25" bottom="0.0" right="15"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="uHs-wj-F4s" firstAttribute="trailing" secondItem="t37-ec-QfF" secondAttribute="trailing" id="9bM-SX-cQ3"/>
|
||||||
|
<constraint firstItem="t37-ec-QfF" firstAttribute="width" secondItem="yAC-P8-0KH" secondAttribute="width" id="OcL-Of-jig"/>
|
||||||
|
<constraint firstItem="t37-ec-QfF" firstAttribute="leading" secondItem="uHs-wj-F4s" secondAttribute="leading" id="edp-Li-q8w"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="t37-ec-QfF" secondAttribute="bottom" id="esW-Vm-lih"/>
|
||||||
|
<constraint firstItem="t37-ec-QfF" firstAttribute="top" secondItem="yAC-P8-0KH" secondAttribute="top" constant="20" id="xXk-pf-gNc"/>
|
||||||
|
</constraints>
|
||||||
|
<viewLayoutGuide key="contentLayoutGuide" id="yAC-P8-0KH"/>
|
||||||
|
<viewLayoutGuide key="frameLayoutGuide" id="uHs-wj-F4s"/>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="slh-HS-0OR"/>
|
||||||
|
<color key="backgroundColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="iqc-o5-ovk" firstAttribute="width" secondItem="qHL-AI-7IP" secondAttribute="width" multiplier="0.724638" id="18H-xY-ShM"/>
|
||||||
|
<constraint firstItem="iqc-o5-ovk" firstAttribute="top" secondItem="slh-HS-0OR" secondAttribute="top" id="SHa-dQ-wGm"/>
|
||||||
|
<constraint firstItem="iqc-o5-ovk" firstAttribute="trailing" secondItem="slh-HS-0OR" secondAttribute="trailing" id="V31-3u-cFE"/>
|
||||||
|
<constraint firstItem="slh-HS-0OR" firstAttribute="bottom" secondItem="iqc-o5-ovk" secondAttribute="bottom" id="yED-m1-qor"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="G60-kc-Vly">
|
||||||
|
<barButtonItem key="backBarButtonItem" title=" " id="Ro0-vL-itb"/>
|
||||||
|
</navigationItem>
|
||||||
|
<connections>
|
||||||
|
<outlet property="languageControl" destination="dR3-t9-4tw" id="3Jd-0j-YA7"/>
|
||||||
|
<outlet property="logoutBtn" destination="mCq-h5-pMf" id="bkx-Ld-3gQ"/>
|
||||||
|
<outlet property="selectionMenuTrailingConstraint" destination="V31-3u-cFE" id="gJh-Kh-fu0"/>
|
||||||
|
<outlet property="theme1" destination="5Wh-aJ-q5B" id="8pf-Kq-IZn"/>
|
||||||
|
<outlet property="theme2" destination="nAY-LD-xxC" id="gfY-LN-cbJ"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="WmS-PJ-wRh" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-181" y="979"/>
|
||||||
|
</scene>
|
||||||
|
<!--HOME-->
|
||||||
|
<scene sceneID="1ci-Pa-RRI">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="HomeVC" id="zvD-eW-9c3" customClass="HomeVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="6gC-IE-A1o">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Wyt-mn-spz">
|
||||||
|
<rect key="frame" x="359" y="53" width="40" height="40"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="40" id="CVa-aE-1tV"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="Wyt-mn-spz" secondAttribute="height" multiplier="1:1" id="Orr-Ks-Tgl"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="15"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" image="SideMenu"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="barButtonTapped:" destination="zvD-eW-9c3" eventType="touchUpInside" id="7Ly-MJ-OWB"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="new" translatesAutoresizingMaskIntoConstraints="NO" id="0Ka-ud-jLV">
|
||||||
|
<rect key="frame" x="0.0" y="155.5" width="414" height="550"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="550" id="VbD-Tm-ZAK"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="Y8i-Lx-Cjg"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBrownColor"/>
|
||||||
|
<color key="tintColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="Wyt-mn-spz" firstAttribute="top" secondItem="Y8i-Lx-Cjg" secondAttribute="top" constant="5" id="QqO-2g-qlE"/>
|
||||||
|
<constraint firstItem="Y8i-Lx-Cjg" firstAttribute="trailing" secondItem="0Ka-ud-jLV" secondAttribute="trailing" id="iuA-w4-O96"/>
|
||||||
|
<constraint firstItem="0Ka-ud-jLV" firstAttribute="centerY" secondItem="Y8i-Lx-Cjg" secondAttribute="centerY" id="qqH-Hx-R92"/>
|
||||||
|
<constraint firstItem="Y8i-Lx-Cjg" firstAttribute="trailing" secondItem="Wyt-mn-spz" secondAttribute="trailing" constant="15" id="u67-sY-Tz5"/>
|
||||||
|
<constraint firstItem="0Ka-ud-jLV" firstAttribute="leading" secondItem="Y8i-Lx-Cjg" secondAttribute="leading" id="yoK-CV-3wf"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<tabBarItem key="tabBarItem" title="HOME" image="HomeIcon" selectedImage="HomeIcon" id="IrD-1O-RlD"/>
|
||||||
|
<navigationItem key="navigationItem" id="4aE-cY-VP6">
|
||||||
|
<barButtonItem key="leftBarButtonItem" image="trash" catalog="system" style="plain" id="W4z-bg-V69">
|
||||||
|
<button key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" id="dc0-IA-0u3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" image="tray.full.fill" catalog="system"/>
|
||||||
|
</button>
|
||||||
|
</barButtonItem>
|
||||||
|
</navigationItem>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="ufW-nJ-WRj" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="2199" y="-494"/>
|
||||||
|
</scene>
|
||||||
|
<!--Item-->
|
||||||
|
<scene sceneID="ZJ9-YU-7B1">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="ExploreWokaVC" id="wHe-qy-JF8" customClass="ExploreWokaVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="HLg-jy-523">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lxy-WU-CSd">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</view>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bkq-AU-CNT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</view>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="P1N-m9-rvT">
|
||||||
|
<rect key="frame" x="177" y="802" width="60" height="60"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="P1N-m9-rvT" secondAttribute="height" multiplier="1:1" id="P6m-5H-Mc0"/>
|
||||||
|
<constraint firstAttribute="height" constant="60" id="nv6-1G-C4K"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="tintColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" image="CloseIcon">
|
||||||
|
<preferredSymbolConfiguration key="preferredSymbolConfiguration" scale="large"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="closeTapped:" destination="wHe-qy-JF8" eventType="touchUpInside" id="NqN-5u-3vN"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="D79-Dn-2Pj"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="lxy-WU-CSd" firstAttribute="top" secondItem="HLg-jy-523" secondAttribute="top" id="1xt-2u-AS7"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="bkq-AU-CNT" secondAttribute="bottom" id="6em-C5-wsM"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="lxy-WU-CSd" secondAttribute="bottom" id="DuA-io-xu1"/>
|
||||||
|
<constraint firstItem="bkq-AU-CNT" firstAttribute="leading" secondItem="D79-Dn-2Pj" secondAttribute="leading" id="OuW-WU-gkg"/>
|
||||||
|
<constraint firstItem="lxy-WU-CSd" firstAttribute="leading" secondItem="D79-Dn-2Pj" secondAttribute="leading" id="cxe-Gq-rhA"/>
|
||||||
|
<constraint firstItem="P1N-m9-rvT" firstAttribute="centerX" secondItem="D79-Dn-2Pj" secondAttribute="centerX" id="kWw-aG-YDa"/>
|
||||||
|
<constraint firstItem="bkq-AU-CNT" firstAttribute="top" secondItem="HLg-jy-523" secondAttribute="top" id="v3g-LP-cO8"/>
|
||||||
|
<constraint firstItem="lxy-WU-CSd" firstAttribute="trailing" secondItem="D79-Dn-2Pj" secondAttribute="trailing" id="yjV-xh-53r"/>
|
||||||
|
<constraint firstItem="bkq-AU-CNT" firstAttribute="trailing" secondItem="D79-Dn-2Pj" secondAttribute="trailing" id="z17-Q6-WjV"/>
|
||||||
|
<constraint firstItem="P1N-m9-rvT" firstAttribute="bottom" secondItem="D79-Dn-2Pj" secondAttribute="bottom" id="zPU-eq-ciE"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<tabBarItem key="tabBarItem" title="Item" id="waB-zL-0Fo"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="blurView" destination="bkq-AU-CNT" id="0nM-J2-yrv"/>
|
||||||
|
<outlet property="extraView" destination="lxy-WU-CSd" id="ba7-wu-ZGj"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="HdD-nD-JtP" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="3004" y="978"/>
|
||||||
|
</scene>
|
||||||
|
<!--Tab BarVC-->
|
||||||
|
<scene sceneID="rGl-mC-J6X">
|
||||||
|
<objects>
|
||||||
|
<tabBarController automaticallyAdjustsScrollViewInsets="NO" id="FME-2B-5e1" customClass="TabBarVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationItem key="navigationItem" id="HR9-9M-S4V"/>
|
||||||
|
<tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" itemPositioning="centered" itemSpacing="100" itemWidth="100" id="Yve-na-gxA">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<color key="barTintColor" systemColor="systemGreenColor"/>
|
||||||
|
</tabBar>
|
||||||
|
<connections>
|
||||||
|
<segue destination="zvD-eW-9c3" kind="relationship" relationship="viewControllers" id="SLT-ej-tKu"/>
|
||||||
|
<segue destination="adP-Pb-amR" kind="relationship" relationship="viewControllers" id="8ka-Vv-e3P"/>
|
||||||
|
<segue destination="55l-Gk-Npk" kind="relationship" relationship="viewControllers" id="zyf-tW-Djx"/>
|
||||||
|
</connections>
|
||||||
|
</tabBarController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkq-DE-qYA" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="2199" y="195"/>
|
||||||
|
</scene>
|
||||||
|
<!--MY LIST-->
|
||||||
|
<scene sceneID="lFi-4n-Vjw">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="MyListVC" id="55l-Gk-Npk" customClass="MyListVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="23B-pX-ODs">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a7Y-B6-f0Q">
|
||||||
|
<rect key="frame" x="359" y="53" width="40" height="40"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="40" id="2KM-80-dp7"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="a7Y-B6-f0Q" secondAttribute="height" multiplier="1:1" id="VYl-jc-u32"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="15"/>
|
||||||
|
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
|
||||||
|
<state key="normal" image="SideMenu"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="barButtonTapped:" destination="zvD-eW-9c3" eventType="touchUpInside" id="qJ8-sq-jmG"/>
|
||||||
|
<action selector="sideBarBtnTapped:" destination="55l-Gk-Npk" eventType="touchUpInside" id="L0r-44-zYU"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="fPD-rO-ZgU"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemCyanColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="fPD-rO-ZgU" firstAttribute="trailing" secondItem="a7Y-B6-f0Q" secondAttribute="trailing" constant="15" id="1TC-Nf-fdz"/>
|
||||||
|
<constraint firstItem="a7Y-B6-f0Q" firstAttribute="top" secondItem="fPD-rO-ZgU" secondAttribute="top" constant="5" id="L4o-KM-D1O"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<tabBarItem key="tabBarItem" title="MY LIST" image="HeartIcon" id="dhn-IV-GcD"/>
|
||||||
|
<navigationItem key="navigationItem" id="dCO-Wi-XFC"/>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="lPK-ME-Nlb" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="2199" y="978"/>
|
||||||
|
</scene>
|
||||||
|
<!--EXPLORE WOKA-->
|
||||||
|
<scene sceneID="taU-OT-R2P">
|
||||||
|
<objects>
|
||||||
|
<viewController id="adP-Pb-amR" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="jxy-3G-70v">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="Lvr-K8-9K0"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
</view>
|
</view>
|
||||||
|
<tabBarItem key="tabBarItem" title="EXPLORE WOKA" image="ExploreWoka" id="O9V-sl-Yzx"/>
|
||||||
|
<navigationItem key="navigationItem" id="gNN-uZ-gTz"/>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="afN-OE-Wn0" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="121" y="-27"/>
|
<point key="canvasLocation" x="3365" y="195"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<resources>
|
<resources>
|
||||||
|
<image name="CloseIcon" width="61.333332061767578" height="61.333332061767578"/>
|
||||||
|
<image name="ExploreWoka" width="36.5" height="25"/>
|
||||||
|
<image name="HeartIcon" width="19" height="18"/>
|
||||||
|
<image name="HomeIcon" width="19" height="18"/>
|
||||||
|
<image name="SideMenu" width="44" height="44"/>
|
||||||
|
<image name="Theme1" width="106" height="160"/>
|
||||||
|
<image name="Theme2" width="106" height="160"/>
|
||||||
|
<image name="new" width="226" height="394"/>
|
||||||
|
<image name="trash" catalog="system" width="117" height="128"/>
|
||||||
|
<image name="tray.full.fill" catalog="system" width="128" height="88"/>
|
||||||
|
<image name="xmark" catalog="system" width="128" height="113"/>
|
||||||
<systemColor name="systemBackgroundColor">
|
<systemColor name="systemBackgroundColor">
|
||||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</systemColor>
|
</systemColor>
|
||||||
|
<systemColor name="systemBrownColor">
|
||||||
|
<color red="0.63529411764705879" green="0.51764705882352946" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemCyanColor">
|
||||||
|
<color red="0.19607843137254902" green="0.67843137254901964" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemGreenColor">
|
||||||
|
<color red="0.20392156862745098" green="0.7803921568627451" blue="0.34901960784313724" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
</resources>
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// HomeVC.swift
|
|
||||||
// WOKA
|
|
||||||
//
|
|
||||||
// Created by Bilal on 03/05/2024.
|
|
||||||
//
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
class HomeVC: UIViewController {
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
|
||||||
super.viewDidLoad()
|
|
||||||
|
|
||||||
// Do any additional setup after loading the view.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
51
WOKA/Home/ViewModel/SideMenuVM.swift
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// SideMenuVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 21/05/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class SideMenuVM{
|
||||||
|
|
||||||
|
weak var vc : SideMenuVC!
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
customizeSegmentControl()
|
||||||
|
|
||||||
|
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
|
||||||
|
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
|
||||||
|
vc.logoutBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
|
||||||
|
vc.logoutBtn.layer.cornerRadius = vc.logoutBtn.frame.height / 2
|
||||||
|
|
||||||
|
// Adding the trailing constriant to make the view appeared center when expanded
|
||||||
|
let sidemenuBasicConfiguration = SideMenuController.preferences.basic
|
||||||
|
let showPlaceTableOnLeft = (sidemenuBasicConfiguration.position == .under) != (sidemenuBasicConfiguration.direction == .right)
|
||||||
|
if showPlaceTableOnLeft {
|
||||||
|
vc.selectionMenuTrailingConstraint.constant = SideMenuController.preferences.basic.menuWidth - vc.view.frame.width
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add border to theme
|
||||||
|
|
||||||
|
vc.theme1.addBorderView(width: 1.5, color: UIColor.white)
|
||||||
|
vc.theme2.addBorderView(width: 1.5, color: UIColor.white)
|
||||||
|
|
||||||
|
vc.theme1.addTapGesture {
|
||||||
|
print("ss")
|
||||||
|
}
|
||||||
|
|
||||||
|
vc.theme1.addTapGesture {
|
||||||
|
print("ss")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func customizeSegmentControl(){
|
||||||
|
// Customize Segment Control
|
||||||
|
vc.languageControl.layer.cornerRadius = vc.languageControl.layer.frame.height / 2
|
||||||
|
vc.languageControl.layer.masksToBounds = true
|
||||||
|
vc.languageControl.clipsToBounds = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,18 +28,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
|
|
||||||
//Lottie Config to handle rendering
|
//Lottie Config to handle rendering
|
||||||
LottieConfiguration.shared.renderingEngine = .mainThread
|
LottieConfiguration.shared.renderingEngine = .mainThread
|
||||||
|
|
||||||
|
//Configure and modify the side bar
|
||||||
|
configureSideBar()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
|
|
||||||
// print("URL-> " ,url)
|
|
||||||
//// if let referralCode = getReferralCode(from: url) {
|
|
||||||
//// // Do something with the referral code
|
|
||||||
//// print("Referral code: \(referralCode)")
|
|
||||||
//// }
|
|
||||||
// return true
|
|
||||||
// }
|
|
||||||
|
|
||||||
// MARK: UISceneSession Lifecycle
|
// MARK: UISceneSession Lifecycle
|
||||||
|
|
||||||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||||
@@ -54,27 +48,40 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AppDelegate {
|
extension AppDelegate {
|
||||||
// MARK: - Toast Setup
|
// MARK: - Toast Setup
|
||||||
|
|
||||||
|
private func setupToast(){
|
||||||
|
var style = ToastStyle()
|
||||||
|
style.displayShadow = true
|
||||||
|
style.messageColor = UIColor.white
|
||||||
|
style.backgroundColor = UIColor.appColor(.TextDarkBlue)!
|
||||||
|
style.messageFont = FontCustom.shareInstance.customFont(fontName: .Exo2_Medium, size: 16)
|
||||||
|
style.titleAlignment = .center
|
||||||
|
style.messageAlignment = .center
|
||||||
|
style.cornerRadius = 10
|
||||||
|
ToastManager.shared.style = style
|
||||||
|
|
||||||
|
// toggle "tap to dismiss" functionality
|
||||||
|
ToastManager.shared.isTapToDismissEnabled = true
|
||||||
|
|
||||||
|
// toggle queueing behavior
|
||||||
|
ToastManager.shared.isQueueEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Configure Sidebar
|
||||||
|
|
||||||
private func setupToast(){
|
final private func configureSideBar(){
|
||||||
var style = ToastStyle()
|
SideMenuController.preferences.basic.menuWidth = UIScreen.main.bounds.width - 114
|
||||||
style.displayShadow = true
|
SideMenuController.preferences.basic.direction = .right
|
||||||
style.messageColor = UIColor.white
|
SideMenuController.preferences.basic.enableRubberEffectWhenPanning = true
|
||||||
style.backgroundColor = UIColor.appColor(.TextDarkBlue)!
|
SideMenuController.preferences.basic.position = .above
|
||||||
style.messageFont = FontCustom.shareInstance.customFont(fontName: .Exo2_Medium, size: 16)
|
SideMenuController.preferences.basic.enablePanGesture = true
|
||||||
style.titleAlignment = .center
|
SideMenuController.preferences.basic.enablePanGesture = true
|
||||||
style.messageAlignment = .center
|
SideMenuController.preferences.basic.defaultCacheKey = "default"
|
||||||
style.cornerRadius = 10
|
SideMenuController.preferences.animation.hideDuration = 0.6
|
||||||
ToastManager.shared.style = style
|
SideMenuController.preferences.animation.revealDuration = 0.6
|
||||||
|
}
|
||||||
// toggle "tap to dismiss" functionality
|
|
||||||
ToastManager.shared.isTapToDismissEnabled = true
|
|
||||||
|
|
||||||
// toggle queueing behavior
|
|
||||||
ToastManager.shared.isQueueEnabled = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,14 +9,6 @@ import Foundation
|
|||||||
import AVFoundation
|
import AVFoundation
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
/*
|
|
||||||
Language Enum
|
|
||||||
*/
|
|
||||||
enum LocalizedEnum : String , CaseIterable{
|
|
||||||
case hindi = "hi"
|
|
||||||
case english = "en"
|
|
||||||
}
|
|
||||||
|
|
||||||
class AuthFunc{
|
class AuthFunc{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,8 +27,10 @@ class AuthFunc{
|
|||||||
//This is temporary variable. Make it emtpy when the registration is finished.
|
//This is temporary variable. Make it emtpy when the registration is finished.
|
||||||
var regData = UserRegPostModel()
|
var regData = UserRegPostModel()
|
||||||
|
|
||||||
|
// Singleton instance of AuthFunc
|
||||||
static let shareInstance = AuthFunc()
|
static let shareInstance = AuthFunc()
|
||||||
|
|
||||||
|
// Returns the device's UUID
|
||||||
func getDeviceUUID() -> String{
|
func getDeviceUUID() -> String{
|
||||||
/*
|
/*
|
||||||
UIDevice.current.name // e.g. "My iPhone"
|
UIDevice.current.name // e.g. "My iPhone"
|
||||||
@@ -48,6 +42,7 @@ class AuthFunc{
|
|||||||
return UIDevice.current.identifierForVendor!.uuidString
|
return UIDevice.current.identifierForVendor!.uuidString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sets authentication ID and password from the app's info dictionary
|
||||||
func setAuthIDPass(){
|
func setAuthIDPass(){
|
||||||
if let id = Bundle.main.infoDictionary?["API_KEY_ID"] as? String{
|
if let id = Bundle.main.infoDictionary?["API_KEY_ID"] as? String{
|
||||||
authID = id
|
authID = id
|
||||||
@@ -57,32 +52,17 @@ class AuthFunc{
|
|||||||
authPass = pass
|
authPass = pass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func playStartUpsound(){
|
|
||||||
guard let path = Bundle.main.path(forResource: K.StaticFilesString.onBoardMainSound, ofType:"m4a") else {
|
|
||||||
return }
|
|
||||||
let url = URL(fileURLWithPath: path)
|
|
||||||
|
|
||||||
let playerItem = AVPlayerItem(url: url)
|
|
||||||
|
|
||||||
// Initialize AVQueuePlayer with the player item
|
|
||||||
player = AVQueuePlayer(items: [playerItem])
|
|
||||||
|
|
||||||
// Create AVPlayerLooper
|
|
||||||
playerLooper = AVPlayerLooper(player: player!, templateItem: playerItem)
|
|
||||||
player?.play()
|
|
||||||
}
|
|
||||||
|
|
||||||
func stopSound(){
|
|
||||||
player?.removeAllItems()
|
|
||||||
}
|
|
||||||
|
|
||||||
func pauseSound(){
|
|
||||||
player?.pause()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Language Enum
|
||||||
|
|
||||||
|
enum LocalizedEnum : String , CaseIterable{
|
||||||
|
case hindi = "hi"
|
||||||
|
case english = "en"
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Enum representing different user types
|
||||||
|
|
||||||
enum UserType {
|
enum UserType {
|
||||||
case adult
|
case adult
|
||||||
case kid
|
case kid
|
||||||
|
|||||||
38
WOKA/Main/AuthFuncStartupSoundHandling.swift
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// AuthFuncStartupSoundHandling.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 21/05/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
|
extension AuthFunc{
|
||||||
|
// MARK: - Handle The Sound Globally
|
||||||
|
|
||||||
|
func playStartUpsound(){
|
||||||
|
guard let path = Bundle.main.path(forResource: K.StaticFilesString.onBoardMainSound, ofType:"m4a") else {
|
||||||
|
return }
|
||||||
|
let url = URL(fileURLWithPath: path)
|
||||||
|
|
||||||
|
let playerItem = AVPlayerItem(url: url)
|
||||||
|
|
||||||
|
// Initialize AVQueuePlayer with the player item
|
||||||
|
player = AVQueuePlayer(items: [playerItem])
|
||||||
|
|
||||||
|
// Create AVPlayerLooper
|
||||||
|
playerLooper = AVPlayerLooper(player: player!, templateItem: playerItem)
|
||||||
|
player?.play()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stops the sound
|
||||||
|
func stopSound() {
|
||||||
|
player?.removeAllItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pauses the sound
|
||||||
|
func pauseSound() {
|
||||||
|
player?.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,8 +29,8 @@ class SplashVC: UIViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func languageBtnTapped(_ sender: UIButton) {
|
@IBAction func languageBtnTapped(_ sender: UIButton) {
|
||||||
// let sb1 = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
|
// let sb1 = UIStoryboard(name: "Home", bundle: nil)
|
||||||
// let vc1 = sb1.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userIntrestVC) as! UserIntrestVC
|
// let vc1 = sb1.instantiateViewController(withIdentifier: "SideMenu") as! SideMenuController
|
||||||
// self.navigationController?.pushViewController(vc1, animated: true)
|
// self.navigationController?.pushViewController(vc1, animated: true)
|
||||||
//
|
//
|
||||||
// return
|
// return
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
//
|
||||||
|
// TransitionAnimator.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/8/8.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// A Simple transition animator can be configured with animation options.
|
||||||
|
public class BasicTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning {
|
||||||
|
let animationOptions: UIView.AnimationOptions
|
||||||
|
let duration: TimeInterval
|
||||||
|
|
||||||
|
/// Initialize a new animator with animation options and duration.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - options: animation options
|
||||||
|
/// - duration: animation duration
|
||||||
|
public init(options: UIView.AnimationOptions = .transitionCrossDissolve, duration: TimeInterval = 0.4) {
|
||||||
|
self.animationOptions = options
|
||||||
|
self.duration = duration
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: UIViewControllerAnimatedTransitioning
|
||||||
|
|
||||||
|
public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
|
||||||
|
return duration
|
||||||
|
}
|
||||||
|
|
||||||
|
public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
|
||||||
|
guard let fromViewController = transitionContext.viewController(forKey: .from),
|
||||||
|
let toViewController = transitionContext.viewController(forKey: .to) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
transitionContext.containerView.addSubview(toViewController.view)
|
||||||
|
|
||||||
|
let duration = transitionDuration(using: transitionContext)
|
||||||
|
|
||||||
|
UIView.transition(from: fromViewController.view,
|
||||||
|
to: toViewController.view,
|
||||||
|
duration: duration,
|
||||||
|
options: animationOptions,
|
||||||
|
completion: { (_) in
|
||||||
|
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
103
WOKA/TabBar & SideMenu/SideMenu/Delegate.swift
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
//
|
||||||
|
// SideMenuControllerDelegate.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/8/8.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// Delegate Methods
|
||||||
|
public protocol SideMenuControllerDelegate: AnyObject {
|
||||||
|
|
||||||
|
// MARK: Animation
|
||||||
|
|
||||||
|
/// Called to allow the delegate to return a non-interactive animator object for use during view controller transitions.
|
||||||
|
/// Same with UIKit's ``navigationController(_:animationControllerFor:from:to:)``.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - sideMenuController: The side menu controller
|
||||||
|
/// - fromVC: The currently visible view controller.
|
||||||
|
/// - toVC: The view controller that should be visible at the end of the transition.
|
||||||
|
/// - Returns: The animator object responsible for managing the transition animations,
|
||||||
|
/// or nil if you want to use the fade transitions.
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController,
|
||||||
|
animationControllerFrom fromVC: UIViewController,
|
||||||
|
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
|
||||||
|
|
||||||
|
// MARK: Switching
|
||||||
|
|
||||||
|
/// Side menu will show a view controller.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - sideMenuController: current side menu controller
|
||||||
|
/// - viewController: the view controller to show
|
||||||
|
/// - animated: whether it's animated
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController, willShow viewController: UIViewController, animated: Bool)
|
||||||
|
|
||||||
|
/// Side menu did showed a view controller.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - sideMenuController: current side menu controller
|
||||||
|
/// - viewController: the view controller shown
|
||||||
|
/// - animated: whether it's animated
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController, didShow viewController: UIViewController, animated: Bool)
|
||||||
|
|
||||||
|
// MARK: Revealing
|
||||||
|
|
||||||
|
/// Asks the delegate whether the side menu should be shown.
|
||||||
|
///
|
||||||
|
/// Triggered by the pan gesture.
|
||||||
|
/// - Parameter sideMenuController: The side menu
|
||||||
|
/// - Returns: Whether the menu should be revealed.
|
||||||
|
func sideMenuControllerShouldRevealMenu(_ sideMenuController: SideMenuController) -> Bool
|
||||||
|
|
||||||
|
/// Side menu is going to reveal.
|
||||||
|
///
|
||||||
|
/// - Parameter sideMenu: The side menu
|
||||||
|
func sideMenuControllerWillRevealMenu(_ sideMenuController: SideMenuController)
|
||||||
|
|
||||||
|
/// Side menu did revealed.
|
||||||
|
///
|
||||||
|
/// - Parameter sideMenu: The side menu
|
||||||
|
func sideMenuControllerDidRevealMenu(_ sideMenuController: SideMenuController)
|
||||||
|
|
||||||
|
/// Side menu is going to hide.
|
||||||
|
///
|
||||||
|
/// - Parameter sideMenu: The side menu
|
||||||
|
func sideMenuControllerWillHideMenu(_ sideMenuController: SideMenuController)
|
||||||
|
|
||||||
|
/// Side menu did hided.
|
||||||
|
///
|
||||||
|
/// - Parameter sideMenu: The side menu
|
||||||
|
func sideMenuControllerDidHideMenu(_ sideMenuController: SideMenuController)
|
||||||
|
|
||||||
|
|
||||||
|
/// Get the width of side menu in current size
|
||||||
|
/// - Parameter sideMenuController: The side menu
|
||||||
|
func sideMenuControllerGetMenuWidth(_ sideMenuController: SideMenuController, for size: CGSize) -> CGFloat?
|
||||||
|
}
|
||||||
|
|
||||||
|
// Provides default implementation for delegates
|
||||||
|
public extension SideMenuControllerDelegate {
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController,
|
||||||
|
animationControllerFrom fromVC: UIViewController,
|
||||||
|
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController,
|
||||||
|
willShow viewController: UIViewController,
|
||||||
|
animated: Bool) {}
|
||||||
|
func sideMenuController(_ sideMenuController: SideMenuController,
|
||||||
|
didShow viewController: UIViewController,
|
||||||
|
animated: Bool) {}
|
||||||
|
func sideMenuControllerShouldRevealMenu(_ sideMenuController: SideMenuController) -> Bool { true }
|
||||||
|
func sideMenuControllerWillRevealMenu(_ sideMenuController: SideMenuController) {}
|
||||||
|
func sideMenuControllerDidRevealMenu(_ sideMenuController: SideMenuController) {}
|
||||||
|
func sideMenuControllerWillHideMenu(_ sideMenuController: SideMenuController) {}
|
||||||
|
func sideMenuControllerDidHideMenu(_ sideMenuController: SideMenuController) {}
|
||||||
|
func sideMenuControllerGetMenuWidth(_ sideMenuController: SideMenuController, for size: CGSize) -> CGFloat? { nil }
|
||||||
|
}
|
||||||
137
WOKA/TabBar & SideMenu/SideMenu/Preferences.swift
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
//
|
||||||
|
// SideMenuPreferences.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 21/02/2018.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension SideMenuController {
|
||||||
|
/// The preferences of side menu controller.
|
||||||
|
public struct Preferences {
|
||||||
|
|
||||||
|
/// The animation that will apply to the status bar when the menu is revealed/hidden.
|
||||||
|
@available(iOS, deprecated: 13.0, message: "Status bar animation no longer work after iOS 13")
|
||||||
|
public enum StatusBarBehavior {
|
||||||
|
/// Nothing will happen to the status bar.
|
||||||
|
case none
|
||||||
|
/// The status bar will slide up when revealed and slide down when hidden.
|
||||||
|
case slide
|
||||||
|
/// The status bar will fade out when revealed and show up when hidden.
|
||||||
|
case fade
|
||||||
|
/// The status bar on the side menu will be hidden (without animation),
|
||||||
|
/// while the one the on content view will still show.
|
||||||
|
case hideOnMenu
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The direction where menu will show up from.
|
||||||
|
public enum MenuDirection {
|
||||||
|
/// Side menu will reveal from the left side.
|
||||||
|
case left
|
||||||
|
/// Side menu will reveal from the right side.
|
||||||
|
case right
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The menu view position compared to the content view.
|
||||||
|
public enum MenuPosition {
|
||||||
|
/// Menu view is placed above the content view.
|
||||||
|
case above
|
||||||
|
/// Menu view is placed below the content view.
|
||||||
|
case under
|
||||||
|
/// Menu view is placed in the same layer with the content view.
|
||||||
|
case sideBySide
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct Animation {
|
||||||
|
/// The animation interval of revealing side menu. Default is `0.4`.
|
||||||
|
public var revealDuration: TimeInterval = 0.4
|
||||||
|
|
||||||
|
/// The animation interval of hiding side menu. Default is `0.4`.
|
||||||
|
public var hideDuration: TimeInterval = 0.4
|
||||||
|
|
||||||
|
/// The animation option of reveal/hide. Default is ``.curveEaseInOut``.
|
||||||
|
public var options: UIView.AnimationOptions = .curveEaseInOut
|
||||||
|
|
||||||
|
/// The amping ratio option used in the revealing and hiding animation of the menu. The default is `1`.
|
||||||
|
public var dampingRatio: CGFloat = 1
|
||||||
|
|
||||||
|
/// The ``initialSpringVelocity`` option used in the revealing and hiding animation of the menu. The default is `1`.
|
||||||
|
public var initialSpringVelocity: CGFloat = 1
|
||||||
|
|
||||||
|
/// Whether a shadow effect should be added on content view when revealing the menu. The default is true.
|
||||||
|
/// If the position is `.under`, the shadow effect will not be added even if this value is set to `true`.
|
||||||
|
public var shouldAddShadowWhenRevealing = true
|
||||||
|
|
||||||
|
/// The shadow's alpha when showing on the content view. Default is `0.2`.
|
||||||
|
public var shadowAlpha: CGFloat = 0.2
|
||||||
|
|
||||||
|
/// The shadow's color when showing on the content view. Default is `black`.
|
||||||
|
public var shadowColor: UIColor = .black
|
||||||
|
|
||||||
|
/// Whether we should add a blurr effect on shadow when revealing
|
||||||
|
public var shouldAddBlurWhenRevealing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct Configuration {
|
||||||
|
/// The width of the side menu. The default is `300`.
|
||||||
|
/// Note that you should only modify this property before the side menu controller is initialized.
|
||||||
|
public var menuWidth: CGFloat = 300
|
||||||
|
|
||||||
|
/// The position of the side menu. Default is ``.above``.
|
||||||
|
/// Note that you should only modify this property before the side menu controller is initialized.
|
||||||
|
public var position: MenuPosition = .above
|
||||||
|
|
||||||
|
/// Whether the direction of side menu should be reversed when the user interaction layout direction is RTL.
|
||||||
|
/// More specific, when the app is using a right to left (RTL) language, the direction of side menu will be
|
||||||
|
/// reversed
|
||||||
|
public var shouldRespectLanguageDirection = true
|
||||||
|
|
||||||
|
// Whether the direction of side menu should be reversed forcefully to RTL. This is required if we're changing the application language in runtime.
|
||||||
|
// The direction of side menu will be reversed forcefully. The default is false.
|
||||||
|
public var forceRightToLeft = false
|
||||||
|
|
||||||
|
/// The direction of side menu. Default is ``.left``.
|
||||||
|
/// Note that you should only modify this property before the side menu controller is initialized.
|
||||||
|
public var direction: MenuDirection = .left
|
||||||
|
|
||||||
|
/// The status bar behavior when menu revealed / hidden. Default is `.none`.
|
||||||
|
@available(iOS, deprecated: 13.0, message: "Status bar animation no longer work after iOS 13")
|
||||||
|
public var statusBarBehavior: StatusBarBehavior = .none
|
||||||
|
|
||||||
|
/// Whether the pan gesture should be enabled. The default is true.
|
||||||
|
public var enablePanGesture = true
|
||||||
|
|
||||||
|
/// If enabled, the menu view will act like a rubber band when reaching the border. The default is true.
|
||||||
|
public var enableRubberEffectWhenPanning = true
|
||||||
|
|
||||||
|
/// If enabled, the menu view will be hidden when the app entering background. The default is false.
|
||||||
|
public var hideMenuWhenEnteringBackground = false
|
||||||
|
|
||||||
|
/// The cache key for the first content view controller.
|
||||||
|
public var defaultCacheKey: String?
|
||||||
|
|
||||||
|
/// The side menu should use content's supported orientations. Default is false.
|
||||||
|
public var shouldUseContentSupportedOrientations: Bool = false
|
||||||
|
|
||||||
|
/// The supported orientations of side menu controller. Default is ``.allButUpsideDown``.
|
||||||
|
public var supportedOrientations: UIInterfaceOrientationMask = .allButUpsideDown
|
||||||
|
|
||||||
|
/// The side menu shouldAutorotate. Default is `true`.
|
||||||
|
public var shouldAutorotate: Bool = true
|
||||||
|
|
||||||
|
/// The sensitivity of the pan gesture recognizer revealing menu view controller.
|
||||||
|
public var panGestureSensitivity: CGFloat = 0.25
|
||||||
|
|
||||||
|
/// If the side menu should keep open on rotation. Default is `false`.
|
||||||
|
public var keepsMenuOpenAfterRotation: Bool = false
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The basic configuration of side menu.
|
||||||
|
public var basic = Configuration()
|
||||||
|
|
||||||
|
/// The animation configuration of side menu.
|
||||||
|
public var animation = Animation()
|
||||||
|
}
|
||||||
|
}
|
||||||
40
WOKA/TabBar & SideMenu/SideMenu/Segue.swift
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
//
|
||||||
|
// SideMenuSegue.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/8/8.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
/// Custom Segue that is required for ``SideMenuController`` to be used in Storyboard.
|
||||||
|
open class SideMenuSegue: UIStoryboardSegue {
|
||||||
|
|
||||||
|
/// The type of segue
|
||||||
|
public enum ContentType: String {
|
||||||
|
/// represent the content scene of side menu
|
||||||
|
case content = "SideMenu.Content"
|
||||||
|
/// represent the menu scene of side menu
|
||||||
|
case menu = "SideMenu.Menu"
|
||||||
|
}
|
||||||
|
|
||||||
|
/// current content type
|
||||||
|
public var contentType = ContentType.content
|
||||||
|
|
||||||
|
/// Performing the segue, will change the corresponding view controller of side menu to `destination` view controller.
|
||||||
|
/// This method is called when loading from storyboard.
|
||||||
|
open override func perform() {
|
||||||
|
guard let sideMenuController = source as? SideMenuController else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch contentType {
|
||||||
|
case .content:
|
||||||
|
sideMenuController.contentViewController = destination
|
||||||
|
case .menu:
|
||||||
|
sideMenuController.menuViewController = destination
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
WOKA/TabBar & SideMenu/SideMenu/SideMenu.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// SideMenu.h
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 03/02/2018.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
//! Project version number for SideMenu.
|
||||||
|
FOUNDATION_EXPORT double SideMenuVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for SideMenu.
|
||||||
|
FOUNDATION_EXPORT const unsigned char SideMenuVersionString[];
|
||||||
|
|
||||||
855
WOKA/TabBar & SideMenu/SideMenu/SideMenuController.swift
Normal file
@@ -0,0 +1,855 @@
|
|||||||
|
//
|
||||||
|
// SideMenuController.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 10/02/2018.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// MARK: SideMenuController
|
||||||
|
|
||||||
|
/// A container view controller owns a menu view controller and a content view controller.
|
||||||
|
///
|
||||||
|
/// The overall architecture of SideMenuController is:
|
||||||
|
///
|
||||||
|
/// SideMenuController
|
||||||
|
///
|
||||||
|
/// ├── Menu View Controller
|
||||||
|
///
|
||||||
|
/// └── Content View Controller
|
||||||
|
open class SideMenuController: UIViewController {
|
||||||
|
|
||||||
|
/// Configure this property to change the behavior of SideMenuController;
|
||||||
|
public static var preferences = Preferences()
|
||||||
|
private var preferences: Preferences {
|
||||||
|
Self.preferences
|
||||||
|
}
|
||||||
|
|
||||||
|
private lazy var adjustedDirection = Preferences.MenuDirection.left
|
||||||
|
|
||||||
|
private var isInitiatedFromStoryboard: Bool {
|
||||||
|
storyboard != nil
|
||||||
|
}
|
||||||
|
|
||||||
|
private var menuWidth: CGFloat {
|
||||||
|
delegate?.sideMenuControllerGetMenuWidth(self, for: view.frame.size) ?? preferences.basic.menuWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The identifier of content view controller segue.
|
||||||
|
/// If the SideMenuController instance is initiated from IB, this identifier will
|
||||||
|
/// be used to retrieve the content view controller.
|
||||||
|
@IBInspectable public var contentSegueID: String = SideMenuSegue.ContentType.content.rawValue
|
||||||
|
|
||||||
|
/// The identifier of menu view controller segue.
|
||||||
|
/// If the SideMenuController instance is initiated from IB, this identifier will
|
||||||
|
/// be used to retrieve the menu view controller.
|
||||||
|
@IBInspectable public var menuSegueID: String = SideMenuSegue.ContentType.menu.rawValue
|
||||||
|
|
||||||
|
/// Caching
|
||||||
|
private lazy var lazyCachedViewControllerGenerators: [String: () -> UIViewController?] = [:]
|
||||||
|
private lazy var lazyCachedViewControllers: [String: UIViewController] = [:]
|
||||||
|
|
||||||
|
/// The side menu controller's delegate object.
|
||||||
|
public weak var delegate: SideMenuControllerDelegate?
|
||||||
|
|
||||||
|
// swiftlint:disable:next weak_delegate
|
||||||
|
/// Tell whether ``contentViewController`` setter should call the delegate.
|
||||||
|
/// Work as a workaround when switching content view controller from other animation approach which also change the
|
||||||
|
private var shouldCallSwitchingDelegate = true
|
||||||
|
|
||||||
|
// swiftlint:disable:next implicitly_unwrapped_optional
|
||||||
|
/// The content view controller. Changes its value will change the display immediately.
|
||||||
|
/// If the new value is already one of the side menu controller's child controllers, nothing will happen beside value change.
|
||||||
|
/// If you want a caching approach, use ``setContentViewController(with:animated:completion:)``. Its value should not be nil.
|
||||||
|
open var contentViewController: UIViewController! {
|
||||||
|
didSet {
|
||||||
|
guard contentViewController !== oldValue &&
|
||||||
|
isViewLoaded &&
|
||||||
|
!children.contains(contentViewController) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if shouldCallSwitchingDelegate {
|
||||||
|
delegate?.sideMenuController(self, willShow: contentViewController, animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
load(contentViewController, on: contentContainerView)
|
||||||
|
contentContainerView.sendSubviewToBack(contentViewController.view)
|
||||||
|
unload(oldValue)
|
||||||
|
|
||||||
|
if shouldCallSwitchingDelegate {
|
||||||
|
delegate?.sideMenuController(self, didShow: contentViewController, animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable:next implicitly_unwrapped_optional
|
||||||
|
/// The menu view controller. Its value should not be nil.
|
||||||
|
open var menuViewController: UIViewController! {
|
||||||
|
didSet {
|
||||||
|
guard menuViewController !== oldValue && isViewLoaded else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
load(menuViewController, on: menuContainerView)
|
||||||
|
unload(oldValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private let menuContainerView = UIView()
|
||||||
|
private let contentContainerView = UIView()
|
||||||
|
private var statusBarScreenShotView: UIView?
|
||||||
|
|
||||||
|
/// Return true if the menu is now revealing.
|
||||||
|
open var isMenuRevealed = false
|
||||||
|
|
||||||
|
private var shouldShowShadowOnContent: Bool {
|
||||||
|
return preferences.animation.shouldAddShadowWhenRevealing && preferences.basic.position != .under
|
||||||
|
}
|
||||||
|
|
||||||
|
/// States used in panning gesture
|
||||||
|
private var isValidatePanningBegan = false
|
||||||
|
private var panningBeganPointX: CGFloat = 0
|
||||||
|
|
||||||
|
private var isContentOrMenuNotInitialized: Bool {
|
||||||
|
return menuViewController == nil || contentViewController == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The view responsible for tapping to hide the menu and shadow
|
||||||
|
private weak var contentContainerOverlay: UIView?
|
||||||
|
|
||||||
|
// The pan gesture recognizer responsible for revealing and hiding side menu
|
||||||
|
private weak var panGestureRecognizer: UIPanGestureRecognizer?
|
||||||
|
|
||||||
|
var shouldReverseDirection: Bool {
|
||||||
|
if preferences.basic.forceRightToLeft { return true }
|
||||||
|
guard preferences.basic.shouldRespectLanguageDirection else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
let attribute = view.semanticContentAttribute
|
||||||
|
let layoutDirection = UIView.userInterfaceLayoutDirection(for: attribute)
|
||||||
|
return layoutDirection == .rightToLeft
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Initialization
|
||||||
|
|
||||||
|
/// Creates a ``SideMenuController`` instance with the content view controller and menu view controller.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - contentViewController: the content view controller
|
||||||
|
/// - menuViewController: the menu view controller
|
||||||
|
public convenience init(contentViewController: UIViewController, menuViewController: UIViewController) {
|
||||||
|
self.init(nibName: nil, bundle: nil)
|
||||||
|
|
||||||
|
// Assignment in initializer won't trigger the setter
|
||||||
|
self.contentViewController = contentViewController
|
||||||
|
self.menuViewController = menuViewController
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
unregisterNotifications()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Life Cycle
|
||||||
|
|
||||||
|
/// ``SideMenuController`` may be initialized from Storyboard, thus we shouldn't load the view in `loadView()`.
|
||||||
|
/// As mentioned by Apple, "If you use Interface Builder to create your views and initialize the view controller,
|
||||||
|
/// you must not override this method."
|
||||||
|
open override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
// Setup from the IB
|
||||||
|
// Side menu may be initialized from the IB while segues are not used, thus passing the performing of
|
||||||
|
// segues if content and menu is already set
|
||||||
|
if isInitiatedFromStoryboard && isContentOrMenuNotInitialized {
|
||||||
|
// Note that if you are using the `SideMenuController` from the IB, you must supply the default or
|
||||||
|
// custom view controller ID in the storyboard.
|
||||||
|
performSegue(withIdentifier: contentSegueID, sender: self)
|
||||||
|
performSegue(withIdentifier: menuSegueID, sender: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
if isContentOrMenuNotInitialized {
|
||||||
|
fatalError("[SideMenuSwift] `menuViewController` or `contentViewController` should not be nil.")
|
||||||
|
}
|
||||||
|
|
||||||
|
contentContainerView.frame = view.bounds
|
||||||
|
view.addSubview(contentContainerView)
|
||||||
|
|
||||||
|
resolveDirection(with: contentContainerView)
|
||||||
|
|
||||||
|
menuContainerView.frame = sideMenuFrame(visibility: false)
|
||||||
|
view.addSubview(menuContainerView)
|
||||||
|
|
||||||
|
load(contentViewController, on: contentContainerView)
|
||||||
|
load(menuViewController, on: menuContainerView)
|
||||||
|
|
||||||
|
if preferences.basic.position == .under {
|
||||||
|
view.bringSubviewToFront(contentContainerView)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forwarding status bar style/hidden status to content view controller
|
||||||
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
|
|
||||||
|
if let key = preferences.basic.defaultCacheKey {
|
||||||
|
lazyCachedViewControllers[key] = contentViewController
|
||||||
|
}
|
||||||
|
|
||||||
|
configureGesturesRecognizer()
|
||||||
|
setUpNotifications()
|
||||||
|
|
||||||
|
// sideMenuController?.cache(viewController: SideMenuVC(), with: "second")
|
||||||
|
// sideMenuController?.cache(viewController: TabBarVC(), with: "second")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private func resolveDirection(with view: UIView) {
|
||||||
|
if shouldReverseDirection {
|
||||||
|
adjustedDirection = (preferences.basic.direction == .left ? .right : .left)
|
||||||
|
} else {
|
||||||
|
adjustedDirection = preferences.basic.direction
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Storyboard
|
||||||
|
|
||||||
|
open override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||||
|
guard let segue = segue as? SideMenuSegue, let identifier = segue.identifier else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch identifier {
|
||||||
|
case contentSegueID:
|
||||||
|
segue.contentType = .content
|
||||||
|
case menuSegueID:
|
||||||
|
segue.contentType = .menu
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Reveal/Hide Menu
|
||||||
|
|
||||||
|
/// Reveals the menu.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - animated: If set to true, the process will be animated. The default is true.
|
||||||
|
/// - completion: Completion closure that will be executed after revealing the menu.
|
||||||
|
open func revealMenu(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
|
||||||
|
changeMenuVisibility(reveal: true, animated: animated, completion: completion)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Hides the menu.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - animated: If set to true, the process will be animated. The default is true.
|
||||||
|
/// - completion: Completion closure that will be executed after hiding the menu.
|
||||||
|
open func hideMenu(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
|
||||||
|
changeMenuVisibility(reveal: false, animated: animated, completion: completion)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func changeMenuVisibility(reveal: Bool,
|
||||||
|
animated: Bool = true,
|
||||||
|
shouldCallDelegate: Bool = true,
|
||||||
|
shouldChangeStatusBar: Bool = true,
|
||||||
|
completion: ((Bool) -> Void)? = nil) {
|
||||||
|
menuViewController.beginAppearanceTransition(reveal, animated: animated)
|
||||||
|
|
||||||
|
if shouldCallDelegate {
|
||||||
|
reveal ? delegate?.sideMenuControllerWillRevealMenu(self) : delegate?.sideMenuControllerWillHideMenu(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
if reveal {
|
||||||
|
addContentOverlayViewIfNeeded()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UIApplication.shared.beginIgnoringInteractionEvents()
|
||||||
|
self.view.isUserInteractionEnabled = true
|
||||||
|
|
||||||
|
let animationClosure = {
|
||||||
|
self.menuContainerView.frame = self.sideMenuFrame(visibility: reveal)
|
||||||
|
self.contentContainerView.frame = self.contentFrame(visibility: reveal)
|
||||||
|
if self.shouldShowShadowOnContent {
|
||||||
|
self.contentContainerOverlay?.alpha = reveal ? self.preferences.animation.shadowAlpha : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let animationCompletionClosure: (Bool) -> Void = { finish in
|
||||||
|
self.menuViewController.endAppearanceTransition()
|
||||||
|
|
||||||
|
if shouldCallDelegate {
|
||||||
|
if reveal {
|
||||||
|
self.delegate?.sideMenuControllerDidRevealMenu(self)
|
||||||
|
} else {
|
||||||
|
self.delegate?.sideMenuControllerDidHideMenu(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reveal {
|
||||||
|
self.contentContainerOverlay?.removeFromSuperview()
|
||||||
|
self.contentContainerOverlay = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
completion?(true)
|
||||||
|
|
||||||
|
// UIApplication.shared.endIgnoringInteractionEvents()
|
||||||
|
// self.view.isUserInteractionEnabled = false
|
||||||
|
self.isMenuRevealed = reveal
|
||||||
|
}
|
||||||
|
|
||||||
|
if animated {
|
||||||
|
animateMenu(with: reveal,
|
||||||
|
shouldChangeStatusBar: shouldChangeStatusBar,
|
||||||
|
animations: animationClosure,
|
||||||
|
completion: animationCompletionClosure)
|
||||||
|
} else {
|
||||||
|
// setStatusBar(hidden: reveal)
|
||||||
|
animationClosure()
|
||||||
|
animationCompletionClosure(true)
|
||||||
|
completion?(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private func animateMenu(with reveal: Bool,
|
||||||
|
shouldChangeStatusBar: Bool = true,
|
||||||
|
animations: @escaping () -> Void,
|
||||||
|
completion: ((Bool) -> Void)? = nil) {
|
||||||
|
// let shouldAnimateStatusBarChange = preferences.basic.statusBarBehavior != .hideOnMenu
|
||||||
|
// if shouldChangeStatusBar && !shouldAnimateStatusBarChange && reveal {
|
||||||
|
// setStatusBar(hidden: reveal)
|
||||||
|
// }
|
||||||
|
let duration = reveal ? preferences.animation.revealDuration : preferences.animation.hideDuration
|
||||||
|
UIView.animate(withDuration: duration,
|
||||||
|
delay: 0,
|
||||||
|
usingSpringWithDamping: preferences.animation.dampingRatio,
|
||||||
|
initialSpringVelocity: preferences.animation.initialSpringVelocity,
|
||||||
|
options: preferences.animation.options,
|
||||||
|
animations: {
|
||||||
|
// if shouldChangeStatusBar && shouldAnimateStatusBarChange {
|
||||||
|
// self.setStatusBar(hidden: reveal)
|
||||||
|
// }
|
||||||
|
|
||||||
|
animations()
|
||||||
|
}, completion: { (finished) in
|
||||||
|
// if shouldChangeStatusBar && !shouldAnimateStatusBarChange && !reveal {
|
||||||
|
// self.setStatusBar(hidden: reveal)
|
||||||
|
// }
|
||||||
|
|
||||||
|
completion?(finished)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Gesture Recognizer
|
||||||
|
|
||||||
|
private func configureGesturesRecognizer() {
|
||||||
|
// The gesture will be added anyway, its delegate will tell whether it should be recognized
|
||||||
|
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(SideMenuController.handlePanGesture(_:)))
|
||||||
|
panGesture.delegate = self
|
||||||
|
panGestureRecognizer = panGesture
|
||||||
|
view.addGestureRecognizer(panGesture)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func addContentOverlayViewIfNeeded() {
|
||||||
|
guard contentContainerOverlay == nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var overlay:UIView
|
||||||
|
if SideMenuController.preferences.animation.shouldAddBlurWhenRevealing {
|
||||||
|
let blurEffect = UIBlurEffect(style: .light)
|
||||||
|
overlay = UIVisualEffectView(effect: blurEffect)
|
||||||
|
} else {
|
||||||
|
overlay = UIView(frame: contentContainerView.bounds)
|
||||||
|
}
|
||||||
|
overlay.autoresizingMask = [.flexibleHeight, .flexibleWidth]
|
||||||
|
|
||||||
|
if !shouldShowShadowOnContent {
|
||||||
|
overlay.backgroundColor = .clear
|
||||||
|
} else {
|
||||||
|
overlay.backgroundColor = SideMenuController.preferences.animation.shadowColor
|
||||||
|
overlay.alpha = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// UIKit can coordinate overlay's tap gesture and controller view's pan gesture correctly
|
||||||
|
let tapToHideGesture = UITapGestureRecognizer()
|
||||||
|
tapToHideGesture.addTarget(self, action: #selector(SideMenuController.handleTapGesture(_:)))
|
||||||
|
overlay.addGestureRecognizer(tapToHideGesture)
|
||||||
|
|
||||||
|
contentContainerView.insertSubview(overlay, aboveSubview: contentViewController.view)
|
||||||
|
contentContainerOverlay = overlay
|
||||||
|
contentContainerOverlay?.accessibilityIdentifier = "ContentShadowOverlay"
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func handleTapGesture(_ tap: UITapGestureRecognizer) {
|
||||||
|
hideMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func handlePanGesture(_ pan: UIPanGestureRecognizer) {
|
||||||
|
let isLeft = adjustedDirection == .left
|
||||||
|
var translation = pan.translation(in: pan.view).x
|
||||||
|
let viewToAnimate: UIView
|
||||||
|
let viewToAnimate2: UIView?
|
||||||
|
var leftBorder: CGFloat
|
||||||
|
var rightBorder: CGFloat
|
||||||
|
let containerWidth: CGFloat
|
||||||
|
switch preferences.basic.position {
|
||||||
|
case .above:
|
||||||
|
viewToAnimate = menuContainerView
|
||||||
|
viewToAnimate2 = nil
|
||||||
|
containerWidth = viewToAnimate.frame.width
|
||||||
|
leftBorder = -containerWidth
|
||||||
|
rightBorder = menuWidth - containerWidth
|
||||||
|
case .under:
|
||||||
|
viewToAnimate = contentContainerView
|
||||||
|
viewToAnimate2 = nil
|
||||||
|
containerWidth = viewToAnimate.frame.width
|
||||||
|
leftBorder = 0
|
||||||
|
rightBorder = menuWidth
|
||||||
|
case .sideBySide:
|
||||||
|
viewToAnimate = contentContainerView
|
||||||
|
viewToAnimate2 = menuContainerView
|
||||||
|
containerWidth = viewToAnimate.frame.width
|
||||||
|
leftBorder = 0
|
||||||
|
rightBorder = menuWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isLeft {
|
||||||
|
swap(&leftBorder, &rightBorder)
|
||||||
|
leftBorder *= -1
|
||||||
|
rightBorder *= -1
|
||||||
|
}
|
||||||
|
|
||||||
|
switch pan.state {
|
||||||
|
case .began:
|
||||||
|
panningBeganPointX = viewToAnimate.frame.origin.x
|
||||||
|
isValidatePanningBegan = false
|
||||||
|
case .changed:
|
||||||
|
let resultX = panningBeganPointX + translation
|
||||||
|
let notReachLeftBorder = (!isLeft && preferences.basic.enableRubberEffectWhenPanning) || resultX >= leftBorder
|
||||||
|
let notReachRightBorder = (isLeft && preferences.basic.enableRubberEffectWhenPanning) || resultX <= rightBorder
|
||||||
|
guard notReachLeftBorder && notReachRightBorder else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isValidatePanningBegan {
|
||||||
|
// Do some setup works in the initial step of validate panning. This can't be done in the `.began` period
|
||||||
|
// because we can't know whether its a validate panning
|
||||||
|
addContentOverlayViewIfNeeded()
|
||||||
|
// setStatusBar(hidden: true, animate: true)
|
||||||
|
|
||||||
|
isValidatePanningBegan = true
|
||||||
|
}
|
||||||
|
|
||||||
|
let factor: CGFloat = isLeft ? 1 : -1
|
||||||
|
let notReachDesiredBorder = isLeft ? resultX <= rightBorder : resultX >= leftBorder
|
||||||
|
if notReachDesiredBorder {
|
||||||
|
viewToAnimate.frame.origin.x = resultX
|
||||||
|
} else {
|
||||||
|
if !isMenuRevealed {
|
||||||
|
translation -= menuWidth * factor
|
||||||
|
}
|
||||||
|
viewToAnimate.frame.origin.x = (isLeft ? rightBorder : leftBorder) + factor * menuWidth
|
||||||
|
* log10(translation * factor / menuWidth + 1) * 0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
if let viewToAnimate2 = viewToAnimate2 {
|
||||||
|
viewToAnimate2.frame.origin.x = viewToAnimate.frame.origin.x - containerWidth * factor
|
||||||
|
}
|
||||||
|
|
||||||
|
if shouldShowShadowOnContent {
|
||||||
|
let movingDistance: CGFloat
|
||||||
|
if isLeft {
|
||||||
|
movingDistance = menuContainerView.frame.maxX
|
||||||
|
} else {
|
||||||
|
movingDistance = menuWidth - menuContainerView.frame.minX
|
||||||
|
}
|
||||||
|
let shadowPercent = min(movingDistance / menuWidth, 1)
|
||||||
|
contentContainerOverlay?.alpha = self.preferences.animation.shadowAlpha * shadowPercent
|
||||||
|
}
|
||||||
|
case .ended, .cancelled, .failed:
|
||||||
|
let offset: CGFloat
|
||||||
|
switch preferences.basic.position {
|
||||||
|
case .above:
|
||||||
|
offset = isLeft ? viewToAnimate.frame.maxX : containerWidth - viewToAnimate.frame.minX
|
||||||
|
case .under, .sideBySide:
|
||||||
|
offset = isLeft ? viewToAnimate.frame.minX : containerWidth - viewToAnimate.frame.maxX
|
||||||
|
}
|
||||||
|
let offsetPercent = offset / menuWidth
|
||||||
|
let decisionPoint: CGFloat = isMenuRevealed ? 0.85 : 0.15
|
||||||
|
if offsetPercent > decisionPoint {
|
||||||
|
// We need to call the delegates, change the status bar only when the menu was previous hidden
|
||||||
|
changeMenuVisibility(reveal: true, shouldCallDelegate: !isMenuRevealed, shouldChangeStatusBar: !isMenuRevealed)
|
||||||
|
} else {
|
||||||
|
changeMenuVisibility(reveal: false, shouldCallDelegate: isMenuRevealed, shouldChangeStatusBar: true)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Notification
|
||||||
|
|
||||||
|
private func setUpNotifications() {
|
||||||
|
NotificationCenter.default.addObserver(self,
|
||||||
|
selector: #selector(SideMenuController.appDidEnteredBackground),
|
||||||
|
name: UIApplication.didEnterBackgroundNotification,
|
||||||
|
object: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func unregisterNotifications() {
|
||||||
|
// swiftlint:disable:next notification_center_detachment
|
||||||
|
NotificationCenter.default.removeObserver(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc private func appDidEnteredBackground() {
|
||||||
|
if preferences.basic.hideMenuWhenEnteringBackground {
|
||||||
|
hideMenu(animated: false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Status Bar
|
||||||
|
|
||||||
|
// private func setStatusBar(hidden: Bool, animate: Bool = false) {
|
||||||
|
// // UIKit provides `setNeedsStatusBarAppearanceUpdate` and couple of methods to animate the status bar changes.
|
||||||
|
// // The problem with this approach is it will hide the status bar and it's underlying space completely, as a result,
|
||||||
|
// // the navigation bar will go up as we don't expect.
|
||||||
|
// // So we need to manipulate the windows of status bar manually.
|
||||||
|
//
|
||||||
|
// let behavior = self.preferences.basic.statusBarBehavior
|
||||||
|
// guard let sbw = UIWindow.sb, sbw.isStatusBarHidden(with: behavior) != hidden else {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if animate && behavior != .hideOnMenu {
|
||||||
|
// UIView.animate(withDuration: 0.4, animations: {
|
||||||
|
// sbw.setStatusBarHidden(hidden, with: behavior)
|
||||||
|
// })
|
||||||
|
// } else {
|
||||||
|
// sbw.setStatusBarHidden(hidden, with: behavior)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if behavior == .hideOnMenu {
|
||||||
|
// if !hidden {
|
||||||
|
// statusBarScreenShotView?.removeFromSuperview()
|
||||||
|
// statusBarScreenShotView = nil
|
||||||
|
// } else if statusBarScreenShotView == nil, let newStatusBarScreenShot = statusBarScreenShot() {
|
||||||
|
// statusBarScreenShotView = newStatusBarScreenShot
|
||||||
|
// contentContainerView.insertSubview(newStatusBarScreenShot, aboveSubview: contentViewController.view)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private func statusBarScreenShot() -> UIView? {
|
||||||
|
// let statusBarFrame = UIApplication.shared.statusBarFrame
|
||||||
|
// let screenshot = UIScreen.main.snapshotView(afterScreenUpdates: false)
|
||||||
|
// screenshot.frame = statusBarFrame
|
||||||
|
// screenshot.contentMode = .top
|
||||||
|
// screenshot.clipsToBounds = true
|
||||||
|
// return screenshot
|
||||||
|
// }
|
||||||
|
|
||||||
|
open override var childForStatusBarStyle: UIViewController? {
|
||||||
|
// Forward to the content view controller
|
||||||
|
return contentViewController
|
||||||
|
}
|
||||||
|
|
||||||
|
open override var childForStatusBarHidden: UIViewController? {
|
||||||
|
return contentViewController
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Caching
|
||||||
|
|
||||||
|
/// Caches the closure that generate the view controller with identifier.
|
||||||
|
///
|
||||||
|
/// It's useful when you want to configure the caching relation without instantiating the view controller immediately.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - viewControllerGenerator: The closure that generate the view controller. It will only executed when needed.
|
||||||
|
/// - identifier: Identifier used to change content view controller
|
||||||
|
open func cache(viewControllerGenerator: @escaping () -> UIViewController?, with identifier: String) {
|
||||||
|
lazyCachedViewControllerGenerators[identifier] = viewControllerGenerator
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Caches the view controller with identifier.
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - viewController: the view controller to cache
|
||||||
|
/// - identifier: the identifier
|
||||||
|
open func cache(viewController: UIViewController, with identifier: String) {
|
||||||
|
lazyCachedViewControllers[identifier] = viewController
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Changes the content view controller to the cached one with given `identifier`.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - identifier: the identifier that associates with a cache view controller or generator.
|
||||||
|
/// - animated: whether the transition should be animated, default is `false`.
|
||||||
|
/// - completion: the completion closure will be called when the transition complete. Notice that if the caller is the current content view controller, once the transition completed, the caller will be removed from the parent view controller, and it will have no access to the side menu controller via `sideMenuController`
|
||||||
|
open func setContentViewController(with identifier: String,
|
||||||
|
animated: Bool = false,
|
||||||
|
completion: (() -> Void)? = nil) {
|
||||||
|
if let viewController = lazyCachedViewControllers[identifier] {
|
||||||
|
setContentViewController(to: viewController, animated: animated, completion: completion)
|
||||||
|
} else if let viewController = lazyCachedViewControllerGenerators[identifier]?() {
|
||||||
|
lazyCachedViewControllerGenerators[identifier] = nil
|
||||||
|
lazyCachedViewControllers[identifier] = viewController
|
||||||
|
setContentViewController(to: viewController, animated: animated, completion: completion)
|
||||||
|
} else {
|
||||||
|
fatalError("[SideMenu] View controller associated with \(identifier) not found!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Change the content view controller to `viewController`
|
||||||
|
/// - Parameters:
|
||||||
|
/// - viewController: the view controller which will become the content view controller
|
||||||
|
/// - animated: whether the transition should be animated, default is `false`.
|
||||||
|
/// - completion: the completion closure will be called when the transition complete. Notice that if the caller is the current content view controller, once the transition completed, the caller will be removed from the parent view
|
||||||
|
open func setContentViewController(to viewController: UIViewController,
|
||||||
|
animated: Bool = false,
|
||||||
|
completion: (() -> Void)? = nil) {
|
||||||
|
guard contentViewController !== viewController && isViewLoaded else {
|
||||||
|
completion?()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if animated {
|
||||||
|
delegate?.sideMenuController(self, willShow: viewController, animated: animated)
|
||||||
|
|
||||||
|
addChild(viewController)
|
||||||
|
|
||||||
|
viewController.view.frame = view.bounds
|
||||||
|
viewController.view.translatesAutoresizingMaskIntoConstraints = true
|
||||||
|
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||||
|
|
||||||
|
let animatorFromDelegate = delegate?.sideMenuController(self,
|
||||||
|
animationControllerFrom: contentViewController,
|
||||||
|
to: viewController)
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
if animatorFromDelegate == nil {
|
||||||
|
// swiftlint:disable:next line_length
|
||||||
|
print("[SideMenu] `setContentViewController` is called with animated while the delegate method return nil, fall back to the fade animation.")
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
let animator = animatorFromDelegate ?? BasicTransitionAnimator()
|
||||||
|
|
||||||
|
let transitionContext = SideMenuController.TransitionContext(with: contentViewController,
|
||||||
|
toViewController: viewController)
|
||||||
|
transitionContext.isAnimated = true
|
||||||
|
transitionContext.isInteractive = false
|
||||||
|
transitionContext.completion = { finish in
|
||||||
|
self.unload(self.contentViewController)
|
||||||
|
|
||||||
|
self.shouldCallSwitchingDelegate = false
|
||||||
|
// It's tricky here.
|
||||||
|
// `contentViewController` setter won't trigger due to the `viewController` already is added to the hierarchy.
|
||||||
|
// `shouldCallSwitchingDelegate` also prevent the delegate from been calling.
|
||||||
|
self.contentViewController = viewController
|
||||||
|
self.shouldCallSwitchingDelegate = true
|
||||||
|
|
||||||
|
self.delegate?.sideMenuController(self, didShow: viewController, animated: animated)
|
||||||
|
|
||||||
|
viewController.didMove(toParent: self)
|
||||||
|
|
||||||
|
completion?()
|
||||||
|
}
|
||||||
|
animator.animateTransition(using: transitionContext)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
contentViewController = viewController
|
||||||
|
completion?()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the identifier of current content view controller.
|
||||||
|
///
|
||||||
|
/// - Returns: if not exist, returns nil.
|
||||||
|
open func currentCacheIdentifier() -> String? {
|
||||||
|
guard let index = lazyCachedViewControllers.values.firstIndex(of: contentViewController) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return lazyCachedViewControllers.keys[index]
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Clears cached view controller or generators with identifier.
|
||||||
|
///
|
||||||
|
/// - Parameter identifier: the identifier that associates with a cache view controller or generator.
|
||||||
|
open func clearCache(with identifier: String) {
|
||||||
|
lazyCachedViewControllerGenerators[identifier] = nil
|
||||||
|
lazyCachedViewControllers[identifier] = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Helper Methods
|
||||||
|
|
||||||
|
private func sideMenuFrame(visibility: Bool, targetSize: CGSize? = nil) -> CGRect {
|
||||||
|
let position = preferences.basic.position
|
||||||
|
switch position {
|
||||||
|
case .above, .sideBySide:
|
||||||
|
var baseFrame = CGRect(origin: view.frame.origin, size: targetSize ?? view.frame.size)
|
||||||
|
if visibility {
|
||||||
|
baseFrame.origin.x = menuWidth - baseFrame.width
|
||||||
|
} else {
|
||||||
|
baseFrame.origin.x = -baseFrame.width
|
||||||
|
}
|
||||||
|
let factor: CGFloat = adjustedDirection == .left ? 1 : -1
|
||||||
|
baseFrame.origin.x *= factor
|
||||||
|
return CGRect(origin: baseFrame.origin, size: targetSize ?? baseFrame.size)
|
||||||
|
case .under:
|
||||||
|
return CGRect(origin: view.frame.origin, size: targetSize ?? view.frame.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func contentFrame(visibility: Bool, targetSize: CGSize? = nil) -> CGRect {
|
||||||
|
let position = preferences.basic.position
|
||||||
|
switch position {
|
||||||
|
case .above:
|
||||||
|
return CGRect(origin: view.frame.origin, size: targetSize ?? view.frame.size)
|
||||||
|
case .under, .sideBySide:
|
||||||
|
var baseFrame = CGRect(origin: view.frame.origin, size: targetSize ?? view.frame.size)
|
||||||
|
if visibility {
|
||||||
|
let factor: CGFloat = adjustedDirection == .left ? 1 : -1
|
||||||
|
baseFrame.origin.x = menuWidth * factor
|
||||||
|
} else {
|
||||||
|
baseFrame.origin.x = 0
|
||||||
|
}
|
||||||
|
return CGRect(origin: baseFrame.origin, size: targetSize ?? baseFrame.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func keepSideMenuOpenOnRotation() {
|
||||||
|
guard menuViewController != nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if isMenuRevealed {
|
||||||
|
hideMenu(animated: false, completion: nil)
|
||||||
|
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
|
||||||
|
self.revealMenu(animated: false, completion: nil)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
revealMenu(animated: false) { _ in
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
|
||||||
|
self.hideMenu(animated: false, completion: nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Orientation
|
||||||
|
|
||||||
|
open override var shouldAutorotate: Bool {
|
||||||
|
if preferences.basic.shouldUseContentSupportedOrientations {
|
||||||
|
return contentViewController.shouldAutorotate
|
||||||
|
}
|
||||||
|
return preferences.basic.shouldAutorotate
|
||||||
|
}
|
||||||
|
|
||||||
|
open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
|
||||||
|
if preferences.basic.shouldUseContentSupportedOrientations {
|
||||||
|
return contentViewController.supportedInterfaceOrientations
|
||||||
|
}
|
||||||
|
return preferences.basic.supportedOrientations
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
|
||||||
|
if preferences.basic.keepsMenuOpenAfterRotation {
|
||||||
|
keepSideMenuOpenOnRotation()
|
||||||
|
} else {
|
||||||
|
hideMenu(animated: false, completion: { _ in
|
||||||
|
// Temporally hide the menu container view for smooth animation
|
||||||
|
self.menuContainerView.isHidden = true
|
||||||
|
coordinator.animate(alongsideTransition: { _ in
|
||||||
|
self.contentContainerView.frame = self.contentFrame(visibility: self.isMenuRevealed, targetSize: size)
|
||||||
|
}, completion: { (_) in
|
||||||
|
self.menuContainerView.isHidden = false
|
||||||
|
self.menuContainerView.frame = self.sideMenuFrame(visibility: self.isMenuRevealed, targetSize: size)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
super.viewWillTransition(to: size, with: coordinator)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: UIGestureRecognizerDelegate
|
||||||
|
|
||||||
|
extension SideMenuController: UIGestureRecognizerDelegate {
|
||||||
|
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
|
||||||
|
guard preferences.basic.enablePanGesture else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if let shouldReveal = self.delegate?.sideMenuControllerShouldRevealMenu(self) {
|
||||||
|
guard shouldReveal else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isViewControllerInsideNavigationStack(for: touch.view) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if touch.view is UISlider {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the view is scrollable in horizon direction, don't receive the touch
|
||||||
|
if let scrollView = touch.view as? UIScrollView, scrollView.frame.width > scrollView.contentSize.width {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
||||||
|
if let velocity = panGestureRecognizer?.velocity(in: view) {
|
||||||
|
return isValidateHorizontalMovement(for: velocity)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private func isViewControllerInsideNavigationStack(for view: UIView?) -> Bool {
|
||||||
|
guard let view = view,
|
||||||
|
let viewController = view.parentViewController else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if let navigationController = viewController as? UINavigationController {
|
||||||
|
return navigationController.viewControllers.count > 1
|
||||||
|
} else if let navigationController = viewController.navigationController {
|
||||||
|
if let index = navigationController.viewControllers.firstIndex(of: viewController) {
|
||||||
|
return index > 0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Check if the ViewController is embedded
|
||||||
|
var parent = viewController.parent
|
||||||
|
while parent != nil {
|
||||||
|
guard let navigationController = parent as? UINavigationController else {
|
||||||
|
parent = parent?.parent
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return navigationController.viewControllers.count > 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private func isValidateHorizontalMovement(for velocity: CGPoint) -> Bool {
|
||||||
|
if isMenuRevealed {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
let direction = preferences.basic.direction
|
||||||
|
var factor: CGFloat = direction == .left ? 1 : -1
|
||||||
|
factor *= shouldReverseDirection ? -1 : 1
|
||||||
|
guard velocity.x * factor > 0 else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return abs(velocity.y / velocity.x) < preferences.basic.panGestureSensitivity
|
||||||
|
}
|
||||||
|
}
|
||||||
57
WOKA/TabBar & SideMenu/SideMenu/StatusBar.swift
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
//
|
||||||
|
// StatusBar.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 22/02/2018.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIWindow {
|
||||||
|
|
||||||
|
// swiftlint:disable identifier_name
|
||||||
|
/// Returns current application's `statusBarWindows`
|
||||||
|
static var sb: UIWindow? {
|
||||||
|
// We use a non-public key here to obtain the `statusBarWindow` window.
|
||||||
|
// We have been using it in real world app and it won't be rejected by the review team for using this key.
|
||||||
|
let s = "status", b = "Bar", w = "Window"
|
||||||
|
if #available(iOS 13, *) {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return UIApplication.shared.value(forKey: s+b+w) as? UIWindow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Changes the windows' visibility with custom behavior
|
||||||
|
///
|
||||||
|
/// - Parameters:
|
||||||
|
/// - hidden: the windows hidden status
|
||||||
|
/// - behavior: status bar behavior
|
||||||
|
// internal func setStatusBarHidden(_ hidden: Bool, with behavior: SideMenuController.Preferences.StatusBarBehavior) {
|
||||||
|
// guard behavior != .none else {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// switch behavior {
|
||||||
|
// case .fade, .hideOnMenu:
|
||||||
|
// alpha = hidden ? 0 : 1
|
||||||
|
// case .slide:
|
||||||
|
// let statusBarHeight = UIApplication.shared.statusBarFrame.height
|
||||||
|
// transform = hidden ? CGAffineTransform(translationX: 0, y: -statusBarHeight) : .identity
|
||||||
|
// default:
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// internal func isStatusBarHidden(with behavior: SideMenuController.Preferences.StatusBarBehavior) -> Bool {
|
||||||
|
// switch behavior {
|
||||||
|
// case .none:
|
||||||
|
// return false
|
||||||
|
// case .fade, .hideOnMenu:
|
||||||
|
// return alpha == 0
|
||||||
|
// case .slide:
|
||||||
|
// return transform != .identity
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
80
WOKA/TabBar & SideMenu/SideMenu/TransitionContext.swift
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
//
|
||||||
|
// SideMenuTransitionContext.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/8/8.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
/// A internal transitioning context used for triggering the transition animation
|
||||||
|
extension SideMenuController {
|
||||||
|
class TransitionContext: NSObject, UIViewControllerContextTransitioning {
|
||||||
|
var isAnimated = true
|
||||||
|
var targetTransform: CGAffineTransform = .identity
|
||||||
|
|
||||||
|
let containerView: UIView
|
||||||
|
let presentationStyle: UIModalPresentationStyle
|
||||||
|
|
||||||
|
private var viewControllers = [UITransitionContextViewControllerKey: UIViewController]()
|
||||||
|
|
||||||
|
var isInteractive = false
|
||||||
|
|
||||||
|
var transitionWasCancelled: Bool {
|
||||||
|
// Our non-interactive transition can't be cancelled
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var completion: ((Bool) -> Void)?
|
||||||
|
|
||||||
|
init(with fromViewController: UIViewController, toViewController: UIViewController) {
|
||||||
|
guard let superView = fromViewController.view.superview else {
|
||||||
|
fatalError("fromViewController's view should have a parent view")
|
||||||
|
}
|
||||||
|
presentationStyle = .custom
|
||||||
|
containerView = superView
|
||||||
|
viewControllers = [
|
||||||
|
.from: fromViewController,
|
||||||
|
.to: toViewController
|
||||||
|
]
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
func completeTransition(_ didComplete: Bool) {
|
||||||
|
completion?(didComplete)
|
||||||
|
}
|
||||||
|
|
||||||
|
func viewController(forKey key: UITransitionContextViewControllerKey) -> UIViewController? {
|
||||||
|
return viewControllers[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
func view(forKey key: UITransitionContextViewKey) -> UIView? {
|
||||||
|
switch key {
|
||||||
|
case .from:
|
||||||
|
return viewControllers[.from]?.view
|
||||||
|
case .to:
|
||||||
|
return viewControllers[.to]?.view
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable identifier_name
|
||||||
|
func initialFrame(for vc: UIViewController) -> CGRect {
|
||||||
|
return containerView.frame
|
||||||
|
}
|
||||||
|
|
||||||
|
func finalFrame(for vc: UIViewController) -> CGRect {
|
||||||
|
return containerView.frame
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Interactive, not supported yet
|
||||||
|
|
||||||
|
func updateInteractiveTransition(_ percentComplete: CGFloat) {}
|
||||||
|
func finishInteractiveTransition() {}
|
||||||
|
func cancelInteractiveTransition() {}
|
||||||
|
func pauseInteractiveTransition() {}
|
||||||
|
}
|
||||||
|
}
|
||||||
31
WOKA/TabBar & SideMenu/SideMenu/UIView+Container.swift
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// UIView+Container.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/9/12.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIView {
|
||||||
|
var parentViewController: UIViewController? {
|
||||||
|
var parentResponder: UIResponder? = self
|
||||||
|
while parentResponder != nil {
|
||||||
|
// swiftlint:disable:next force_unwrapping
|
||||||
|
parentResponder = parentResponder!.next
|
||||||
|
if let viewController = parentResponder as? UIViewController {
|
||||||
|
return viewController
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var parentNavigationController: UINavigationController? {
|
||||||
|
let currentViewController = parentViewController
|
||||||
|
if let navigationController = currentViewController as? UINavigationController {
|
||||||
|
return navigationController
|
||||||
|
}
|
||||||
|
return currentViewController?.navigationController
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
//
|
||||||
|
// UIViewController+Container.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 2018/8/8.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIViewController {
|
||||||
|
|
||||||
|
func load(_ viewController: UIViewController?, on view: UIView) {
|
||||||
|
guard let viewController = viewController else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// `willMoveToParentViewController:` is called automatically when adding
|
||||||
|
|
||||||
|
addChild(viewController)
|
||||||
|
|
||||||
|
viewController.view.frame = view.bounds
|
||||||
|
viewController.view.translatesAutoresizingMaskIntoConstraints = true
|
||||||
|
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||||
|
|
||||||
|
view.addSubview(viewController.view)
|
||||||
|
|
||||||
|
viewController.didMove(toParent: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func unload(_ viewController: UIViewController?) {
|
||||||
|
guard let viewController = viewController else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
viewController.willMove(toParent: nil)
|
||||||
|
viewController.view.removeFromSuperview()
|
||||||
|
viewController.removeFromParent()
|
||||||
|
// `didMoveToParentViewController:` is called automatically when removing
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// UIViewController+Extension.swift
|
||||||
|
// SideMenu
|
||||||
|
//
|
||||||
|
// Created by kukushi on 10/02/2018.
|
||||||
|
// Copyright © 2018 kukushi. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// Provides access to the side menu controller
|
||||||
|
public extension UIViewController {
|
||||||
|
|
||||||
|
/// Access the nearest ancestor view controller hierarchy that is a side menu controller.
|
||||||
|
var sideMenuController: SideMenuController? {
|
||||||
|
return findSideMenuController(from: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func findSideMenuController(from viewController: UIViewController) -> SideMenuController? {
|
||||||
|
var sourceViewController: UIViewController? = viewController
|
||||||
|
repeat {
|
||||||
|
sourceViewController = sourceViewController?.parent
|
||||||
|
if let sideMenuController = sourceViewController as? SideMenuController {
|
||||||
|
return sideMenuController
|
||||||
|
}
|
||||||
|
} while (sourceViewController != nil)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
118
WOKA/TabBar & SideMenu/SideMenuVC.swift
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
//
|
||||||
|
// SideMenuVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 21/05/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class SideMenuVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var logoutBtn: UIButton!
|
||||||
|
@IBOutlet weak var selectionMenuTrailingConstraint: NSLayoutConstraint!
|
||||||
|
@IBOutlet weak var languageControl: CustomizableSegmentControl!
|
||||||
|
|
||||||
|
@IBOutlet weak var theme1: UIImageView!
|
||||||
|
@IBOutlet weak var theme2: UIImageView!
|
||||||
|
|
||||||
|
var vm = SideMenuVM()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initView()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func closeBtnTapped(_ sender: UIButton) {
|
||||||
|
self.sideMenuController?.hideMenu()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class CustomizableSegmentControl: UISegmentedControl {
|
||||||
|
|
||||||
|
private(set) lazy var radius:CGFloat = bounds.height / 2
|
||||||
|
|
||||||
|
private let segmentInset: CGFloat = 5 //your inset amount
|
||||||
|
private let segmentImage: UIImage? = UIImage(color: UIColor.white) //your color
|
||||||
|
|
||||||
|
override init(items: [Any]?) {
|
||||||
|
super.init(items: items)
|
||||||
|
selectedSegmentIndex = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
// fatalError("init(coder:) has not been implemented")
|
||||||
|
super.init(coder: coder)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override func layoutSubviews(){
|
||||||
|
super.layoutSubviews()
|
||||||
|
|
||||||
|
self.backgroundColor = #colorLiteral(red: 0.01960784314, green: 0, blue: 0.2196078431, alpha: 1)
|
||||||
|
|
||||||
|
// selected option color
|
||||||
|
self.setTitleTextAttributes([.foregroundColor: UIColor.black, .font : UIFont.systemFont(ofSize: 16, weight: .heavy)], for: .selected)
|
||||||
|
|
||||||
|
// color of other options
|
||||||
|
self.setTitleTextAttributes([.foregroundColor: UIColor.white, .font : UIFont.systemFont(ofSize: 16, weight: .heavy)], for: .normal)
|
||||||
|
//background
|
||||||
|
layer.cornerRadius = radius
|
||||||
|
//foreground
|
||||||
|
let foregroundIndex = numberOfSegments
|
||||||
|
if subviews.indices.contains(foregroundIndex), let foregroundImageView = subviews[foregroundIndex] as? UIImageView{
|
||||||
|
foregroundImageView.bounds = foregroundImageView.bounds.insetBy(dx: segmentInset, dy: segmentInset)
|
||||||
|
foregroundImageView.image = segmentImage //substitute with our own colored image
|
||||||
|
foregroundImageView.layer.removeAnimation(forKey: "SelectionBounds") //this removes the weird scaling animation!
|
||||||
|
foregroundImageView.layer.masksToBounds = true
|
||||||
|
foregroundImageView.layer.cornerRadius = foregroundImageView.bounds.height/2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UIImage{
|
||||||
|
|
||||||
|
//creates a UIImage given a UIColor
|
||||||
|
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
|
||||||
|
let rect = CGRect(origin: .zero, size: size)
|
||||||
|
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
|
||||||
|
color.setFill()
|
||||||
|
UIRectFill(rect)
|
||||||
|
let image = UIGraphicsGetImageFromCurrentImageContext()
|
||||||
|
UIGraphicsEndImageContext()
|
||||||
|
|
||||||
|
guard let cgImage = image?.cgImage else { return nil }
|
||||||
|
self.init(cgImage: cgImage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//extension UIView {
|
||||||
|
//
|
||||||
|
// /// Apply gradient colors to the view.
|
||||||
|
// ///
|
||||||
|
// /// - Parameters:
|
||||||
|
// /// - colors: An array of UIColor objects defining the color of each gradient stop.
|
||||||
|
// /// - startPoint: The start point of the gradient, defined in the unit coordinate space. The start point corresponds to the top-left corner of the layer's bounds rectangle.
|
||||||
|
// /// - endPoint: The end point of the gradient, defined in the unit coordinate space. The end point corresponds to the bottom-right corner of the layer's bounds rectangle.
|
||||||
|
// ///
|
||||||
|
// func applyGradient(colors: [UIColor], startPoint: CGPoint, endPoint: CGPoint) {
|
||||||
|
// // Create a new CAGradientLayer instance
|
||||||
|
// let gradientLayer = CAGradientLayer()
|
||||||
|
//
|
||||||
|
// // Set the frame of the gradient layer to match the bounds of the view
|
||||||
|
// gradientLayer.frame = bounds
|
||||||
|
//
|
||||||
|
// // Convert the array of UIColor objects to an array of CGColor objects
|
||||||
|
// gradientLayer.colors = colors.map { $0.cgColor }
|
||||||
|
//
|
||||||
|
// // Set the start and end points of the gradient
|
||||||
|
// gradientLayer.startPoint = startPoint
|
||||||
|
// gradientLayer.endPoint = endPoint
|
||||||
|
//
|
||||||
|
// // Insert the gradient layer as the bottom layer of the view's layer hierarchy
|
||||||
|
// layer.insertSublayer(gradientLayer, at: 0)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
94
WOKA/TabBar & SideMenu/TabBarVC.swift
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
// TabBarVC
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 14/05/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class TabBarVC: UITabBarController {
|
||||||
|
|
||||||
|
var upperLineView: UIView!
|
||||||
|
|
||||||
|
let spacing: CGFloat = 12
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
self.delegate = self
|
||||||
|
customizeTabBarItemFont()
|
||||||
|
|
||||||
|
UITabBar.appearance().tintColor = #colorLiteral(red: 0.0349480696, green: 0.0643344149, blue: 0.4407724142, alpha: 1)
|
||||||
|
// UITabBar.appearance().unselectedItemTintColor = #colorLiteral(red: 0.0349480696, green: 0.0643344149, blue: 0.4407724142, alpha: 1)
|
||||||
|
UITabBar.appearance().unselectedItemTintColor = #colorLiteral(red: 0.501960814, green: 0.501960814, blue: 0.501960814, alpha: 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLayoutSubviews() {
|
||||||
|
super.viewDidLayoutSubviews()
|
||||||
|
tabBar.frame.size.height = 95
|
||||||
|
tabBar.frame.origin.y = view.frame.height - 95
|
||||||
|
}
|
||||||
|
|
||||||
|
// function to set tab bar item font
|
||||||
|
func customizeTabBarItemFont() {
|
||||||
|
// Set the font attributes
|
||||||
|
let attributes = [NSAttributedString.Key.font: FontCustom.shareInstance.customFont(fontName: .Exo2_Bold, size: 12)]
|
||||||
|
|
||||||
|
// Apply the attributes to the appearance proxy of UITabBarItem
|
||||||
|
UITabBarItem.appearance().setTitleTextAttributes(attributes, for: .normal)
|
||||||
|
}
|
||||||
|
|
||||||
|
// function to customize tab bar item icon size
|
||||||
|
func customizeTabBarItemIconSize() {
|
||||||
|
// Get a reference to the tab bar controller
|
||||||
|
if let tabBarController = self.tabBarController {
|
||||||
|
// Loop through each tab bar item
|
||||||
|
for item in tabBarController.tabBar.items! {
|
||||||
|
// Adjust the image insets to increase the icon size
|
||||||
|
item.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: -8, right: 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///Add tabbar item indicator uper line
|
||||||
|
// func addTabbarIndicatorView(index: Int, isFirstTime: Bool = false){
|
||||||
|
// guard let tabView = tabBar.items?[index].value(forKey: "view") as? UIView else {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if !isFirstTime{
|
||||||
|
// upperLineView.removeFromSuperview()
|
||||||
|
// }
|
||||||
|
// upperLineView = UIView(frame: CGRect(x: tabView.frame.minX + spacing, y: tabView.frame.minY + 0.1, width: tabView.frame.size.width - spacing * 2, height: 4))
|
||||||
|
// upperLineView.backgroundColor = UIColor.systemPink
|
||||||
|
// tabBar.addSubview(upperLineView)
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension TabBarVC: UITabBarControllerDelegate {
|
||||||
|
|
||||||
|
// Implement the tabBarController(_:didSelect:) method to handle tab changes
|
||||||
|
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
|
||||||
|
// This method will be called whenever a tab is selected
|
||||||
|
// Do something based on the selected index
|
||||||
|
print("Selected tab index: \(tabBarController.selectedIndex)")
|
||||||
|
|
||||||
|
if tabBarController.selectedIndex == 1{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implement the tabBarController(_:shouldSelect:) method to control tab selection
|
||||||
|
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
|
||||||
|
|
||||||
|
if viewController == tabBarController.viewControllers?[1] {
|
||||||
|
let sb = UIStoryboard(name: "Home", bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: "ExploreWokaVC") as! ExploreWokaVC
|
||||||
|
vc.modalPresentationStyle = .overCurrentContext
|
||||||
|
vc.modalTransitionStyle = .crossDissolve
|
||||||
|
present(vc, animated: true, completion: nil)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Return false to prevent tab selection
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||