Initial Commit
240
.gitignore
vendored
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
#########################
|
||||||
|
# .gitignore file for Xcode4 and Xcode5 Source projects
|
||||||
|
#
|
||||||
|
# Apple bugs, waiting for Apple to fix/respond:
|
||||||
|
#
|
||||||
|
# 15564624 - what does the xccheckout file in Xcode5 do? Where's the documentation?
|
||||||
|
#
|
||||||
|
# Version 2.6
|
||||||
|
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
|
||||||
|
#
|
||||||
|
# 2015 updates:
|
||||||
|
# - Fixed typo in "xccheckout" line - thanks to @lyck for pointing it out!
|
||||||
|
# - Fixed the .idea optional ignore. Thanks to @hashier for pointing this out
|
||||||
|
# - Finally added "xccheckout" to the ignore. Apple still refuses to answer support requests about this, but in practice it seems you should ignore it.
|
||||||
|
# - minor tweaks from Jona and Coeur (slightly more precise xc* filtering/names)
|
||||||
|
# 2014 updates:
|
||||||
|
# - appended non-standard items DISABLED by default (uncomment if you use those tools)
|
||||||
|
# - removed the edit that an SO.com moderator made without bothering to ask me
|
||||||
|
# - researched CocoaPods .lock more carefully, thanks to Gokhan Celiker
|
||||||
|
# 2013 updates:
|
||||||
|
# - fixed the broken "save personal Schemes"
|
||||||
|
# - added line-by-line explanations for EVERYTHING (some were missing)
|
||||||
|
#
|
||||||
|
# NB: if you are storing "built" products, this WILL NOT WORK,
|
||||||
|
# and you should use a different .gitignore (or none at all)
|
||||||
|
# This file is for SOURCE projects, where there are many extra
|
||||||
|
# files that we want to exclude
|
||||||
|
#
|
||||||
|
#########################
|
||||||
|
|
||||||
|
#####
|
||||||
|
# OS X temporary files that should never be committed
|
||||||
|
#
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
.Trashes
|
||||||
|
|
||||||
|
# c.f. http://www.westwind.com/reference/os-x/invisibles.html
|
||||||
|
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
#
|
||||||
|
# *.lock - this is used and abused by many editors for many different things.
|
||||||
|
# For the main ones I use (e.g. Eclipse), it should be excluded
|
||||||
|
# from source-control, but YMMV.
|
||||||
|
# (lock files are usually local-only file-synchronization on the local FS that should NOT go in git)
|
||||||
|
# c.f. the "OPTIONAL" section at bottom though, for tool-specific variations!
|
||||||
|
#
|
||||||
|
# In particular, if you're using CocoaPods, you'll want to comment-out this line:
|
||||||
|
*.lock
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# profile - REMOVED temporarily (on double-checking, I can't find it in OS X docs?)
|
||||||
|
#profile
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode temporary files that should never be committed
|
||||||
|
#
|
||||||
|
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this...
|
||||||
|
|
||||||
|
*~.nib
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode build files -
|
||||||
|
#
|
||||||
|
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"
|
||||||
|
|
||||||
|
DerivedData/
|
||||||
|
|
||||||
|
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"
|
||||||
|
|
||||||
|
build/
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
|
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
|
||||||
|
#
|
||||||
|
# This is complicated:
|
||||||
|
#
|
||||||
|
# SOMETIMES you need to put this file in version control.
|
||||||
|
# Apple designed it poorly - if you use "custom executables", they are
|
||||||
|
# saved in this file.
|
||||||
|
# 99% of projects do NOT use those, so they do NOT want to version control this file.
|
||||||
|
# ..but if you're in the 1%, comment out the line "*.pbxuser"
|
||||||
|
|
||||||
|
# .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html
|
||||||
|
|
||||||
|
*.pbxuser
|
||||||
|
|
||||||
|
# .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
|
||||||
|
|
||||||
|
*.mode1v3
|
||||||
|
|
||||||
|
# .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html
|
||||||
|
|
||||||
|
*.mode2v3
|
||||||
|
|
||||||
|
# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file
|
||||||
|
|
||||||
|
*.perspectivev3
|
||||||
|
|
||||||
|
# NB: also, whitelist the default ones, some projects need to use these
|
||||||
|
!default.pbxuser
|
||||||
|
!default.mode1v3
|
||||||
|
!default.mode2v3
|
||||||
|
!default.perspectivev3
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode 4 - semi-personal settings
|
||||||
|
#
|
||||||
|
# Apple Shared data that Apple put in the wrong folder
|
||||||
|
# c.f. http://stackoverflow.com/a/19260712/153422
|
||||||
|
# FROM ANSWER: Apple says "don't ignore it"
|
||||||
|
# FROM COMMENTS: Apple is wrong; Apple code is too buggy to trust; there are no known negative side-effects to ignoring Apple's unofficial advice and instead doing the thing that actively fixes bugs in Xcode
|
||||||
|
# Up to you, but ... current advice: ignore it.
|
||||||
|
*.xccheckout
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# OPTION 1: ---------------------------------
|
||||||
|
# throw away ALL personal settings (including custom schemes!
|
||||||
|
# - unless they are "shared")
|
||||||
|
# As per build/ and DerivedData/, this ought to have a trailing slash
|
||||||
|
#
|
||||||
|
# NB: this is exclusive with OPTION 2 below
|
||||||
|
xcuserdata/
|
||||||
|
|
||||||
|
# OPTION 2: ---------------------------------
|
||||||
|
# get rid of ALL personal settings, but KEEP SOME OF THEM
|
||||||
|
# - NB: you must manually uncomment the bits you want to keep
|
||||||
|
#
|
||||||
|
# NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X,
|
||||||
|
# or manually install git over the top of the OS X version
|
||||||
|
# NB: this is exclusive with OPTION 1 above
|
||||||
|
#
|
||||||
|
#xcuserdata/**/*
|
||||||
|
|
||||||
|
# (requires option 2 above): Personal Schemes
|
||||||
|
#
|
||||||
|
#!xcuserdata/**/xcschemes/*
|
||||||
|
|
||||||
|
####
|
||||||
|
# XCode 4 workspaces - more detailed
|
||||||
|
#
|
||||||
|
# Workspaces are important! They are a core feature of Xcode - don't exclude them :)
|
||||||
|
#
|
||||||
|
# Workspace layout is quite spammy. For reference:
|
||||||
|
#
|
||||||
|
# /(root)/
|
||||||
|
# /(project-name).xcodeproj/
|
||||||
|
# project.pbxproj
|
||||||
|
# /project.xcworkspace/
|
||||||
|
# contents.xcworkspacedata
|
||||||
|
# /xcuserdata/
|
||||||
|
# /(your name)/xcuserdatad/
|
||||||
|
# UserInterfaceState.xcuserstate
|
||||||
|
# /xcshareddata/
|
||||||
|
# /xcschemes/
|
||||||
|
# (shared scheme name).xcscheme
|
||||||
|
# /xcuserdata/
|
||||||
|
# /(your name)/xcuserdatad/
|
||||||
|
# (private scheme).xcscheme
|
||||||
|
# xcschememanagement.plist
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
####
|
||||||
|
# Xcode 4 - Deprecated classes
|
||||||
|
#
|
||||||
|
# Allegedly, if you manually "deprecate" your classes, they get moved here.
|
||||||
|
#
|
||||||
|
# We're using source-control, so this is a "feature" that we do not want!
|
||||||
|
|
||||||
|
*.moved-aside
|
||||||
|
|
||||||
|
####
|
||||||
|
# OPTIONAL: Some well-known tools that people use side-by-side with Xcode / iOS development
|
||||||
|
#
|
||||||
|
# NB: I'd rather not include these here, but gitignore's design is weak and doesn't allow
|
||||||
|
# modular gitignore: you have to put EVERYTHING in one file.
|
||||||
|
#
|
||||||
|
# COCOAPODS:
|
||||||
|
#
|
||||||
|
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#what-is-a-podfilelock
|
||||||
|
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
|
||||||
|
#
|
||||||
|
#!Podfile.lock
|
||||||
|
#
|
||||||
|
# RUBY:
|
||||||
|
#
|
||||||
|
# c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
|
||||||
|
#
|
||||||
|
#!Gemfile.lock
|
||||||
|
#
|
||||||
|
# IDEA:
|
||||||
|
#
|
||||||
|
# c.f. https://www.jetbrains.com/objc/help/managing-projects-under-version-control.html?search=workspace.xml
|
||||||
|
#
|
||||||
|
#.idea/workspace.xml
|
||||||
|
#
|
||||||
|
# TEXTMATE:
|
||||||
|
#
|
||||||
|
# -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422
|
||||||
|
#
|
||||||
|
#tm_build_errors
|
||||||
|
|
||||||
|
# Xcode
|
||||||
|
#
|
||||||
|
build/
|
||||||
|
*.pbxuser
|
||||||
|
!default.pbxuser
|
||||||
|
*.mode1v3
|
||||||
|
!default.mode1v3
|
||||||
|
*.mode2v3
|
||||||
|
!default.mode2v3
|
||||||
|
*.perspectivev3
|
||||||
|
!default.perspectivev3
|
||||||
|
xcuserdata
|
||||||
|
*.xccheckout
|
||||||
|
*.moved-aside
|
||||||
|
DerivedData
|
||||||
|
*.hmap
|
||||||
|
*.ipa
|
||||||
|
*.xcuserstate
|
||||||
|
|
||||||
|
# CocoaPods
|
||||||
|
Podfile.lock
|
||||||
|
Pods
|
||||||
|
*.xcworkspace
|
||||||
|
####
|
||||||
|
# UNKNOWN: recommended by others, but I can't discover what these files are
|
||||||
|
#
|
||||||
26
Podfile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Uncomment the next line to define a global platform for your project
|
||||||
|
platform :ios, '13.0'
|
||||||
|
|
||||||
|
target 'WOKA' do
|
||||||
|
# Comment the next line if you don't want to use dynamic frameworks
|
||||||
|
use_frameworks!
|
||||||
|
|
||||||
|
pod 'IQKeyboardManagerSwift', '~> 7.0.2'
|
||||||
|
pod 'lottie-ios'
|
||||||
|
|
||||||
|
# Bottom line is for removing IPHONEOS_DEPLOYMENT_TARGET
|
||||||
|
post_install do |installer|
|
||||||
|
installer.generated_projects.each do |project|
|
||||||
|
project.targets.each do |target|
|
||||||
|
target.build_configurations.each do |config|
|
||||||
|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
|
||||||
|
config.build_settings['CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER'] = 'NO'
|
||||||
|
xcconfig_path = config.base_configuration_reference.real_path
|
||||||
|
xcconfig = File.read(xcconfig_path)
|
||||||
|
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
|
||||||
|
File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
1101
WOKA.xcodeproj/project.pbxproj
Normal file
102
WOKA.xcodeproj/xcshareddata/xcschemes/WOKA.xcscheme
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1530"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "523ED2592BDA2BC700CFED02"
|
||||||
|
BuildableName = "WOKA.app"
|
||||||
|
BlueprintName = "WOKA"
|
||||||
|
ReferencedContainer = "container:WOKA.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO"
|
||||||
|
parallelizable = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "523ED26F2BDA2BC900CFED02"
|
||||||
|
BuildableName = "WOKATests.xctest"
|
||||||
|
BlueprintName = "WOKATests"
|
||||||
|
ReferencedContainer = "container:WOKA.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO"
|
||||||
|
parallelizable = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "523ED2792BDA2BC900CFED02"
|
||||||
|
BuildableName = "WOKAUITests.xctest"
|
||||||
|
BlueprintName = "WOKAUITests"
|
||||||
|
ReferencedContainer = "container:WOKA.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "523ED2592BDA2BC700CFED02"
|
||||||
|
BuildableName = "WOKA.app"
|
||||||
|
BlueprintName = "WOKA"
|
||||||
|
ReferencedContainer = "container:WOKA.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "523ED2592BDA2BC700CFED02"
|
||||||
|
BuildableName = "WOKA.app"
|
||||||
|
BlueprintName = "WOKA"
|
||||||
|
ReferencedContainer = "container:WOKA.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
14
WOKA/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "appstore.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"platform" : "ios",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/AppIcon.appiconset/appstore.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
6
WOKA/Assets/Assets.xcassets/AssetColor/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.604",
|
||||||
|
"green" : "0.051",
|
||||||
|
"red" : "0.106"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "1.000",
|
||||||
|
"green" : "1.000",
|
||||||
|
"red" : "1.000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Authentication/Boy.imageset/Boy.png
vendored
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
WOKA/Assets/Assets.xcassets/Authentication/Boy.imageset/Boy@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
WOKA/Assets/Assets.xcassets/Authentication/Boy.imageset/Boy@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
23
WOKA/Assets/Assets.xcassets/Authentication/Boy.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Boy.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Boy@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Boy@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
6
WOKA/Assets/Assets.xcassets/Authentication/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
23
WOKA/Assets/Assets.xcassets/Authentication/Girl.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Girl.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Girl@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Girl@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/Authentication/Girl.imageset/Girl.png
vendored
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
WOKA/Assets/Assets.xcassets/Authentication/Girl.imageset/Girl@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
WOKA/Assets/Assets.xcassets/Authentication/Girl.imageset/Girl@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 14 KiB |
6
WOKA/Assets/Assets.xcassets/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/16Years.imageset/16Years@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 52 KiB |
21
WOKA/Assets/Assets.xcassets/SplashOnboarding/16Years.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "16Years@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
23
WOKA/Assets/Assets.xcassets/SplashOnboarding/BackgroundSplash.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "bg-splash.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "bg-splash@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "bg-splash@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/BackgroundSplash.imageset/bg-splash.png
vendored
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/BackgroundSplash.imageset/bg-splash@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/BackgroundSplash.imageset/bg-splash@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 87 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
21
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide1.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Image.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide1.imageset/Image.png
vendored
Normal file
|
After Width: | Height: | Size: 222 KiB |
21
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide2.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Slide2@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide2.imageset/Slide2@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 186 KiB |
21
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide3.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Slide3@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/Slide3.imageset/Slide3@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 197 KiB |
23
WOKA/Assets/Assets.xcassets/SplashOnboarding/WokaLogo.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "Woka Logo@0.1x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Woka Logo@0.1x@2x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "Woka Logo@0.1x@3x.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/WokaLogo.imageset/Woka Logo@0.1x.png
vendored
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/WokaLogo.imageset/Woka Logo@0.1x@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
WOKA/Assets/Assets.xcassets/SplashOnboarding/WokaLogo.imageset/Woka Logo@0.1x@3x.png
vendored
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
WOKA/Assets/Fonts/Exo2-Bold.ttf
Normal file
BIN
WOKA/Assets/Fonts/Exo2-ExtraBold.ttf
Normal file
BIN
WOKA/Assets/Fonts/Exo2-Medium.ttf
Normal file
BIN
WOKA/Assets/Fonts/Exo2-Regular.ttf
Normal file
BIN
WOKA/Assets/Fonts/Exo2-SemiBold.ttf
Normal file
BIN
WOKA/Assets/Fonts/Exo2-Thin.ttf
Normal file
1
WOKA/Assets/GIF_JSON/PassingCloud.json
Normal file
BIN
WOKA/Assets/Sounds/OnBoardMainSound.m4a
Normal file
BIN
WOKA/Assets/Sounds/WokaSplashSound.m4a
Normal file
27
WOKA/Authentication/AuthenticationStringConstant.swift
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// AuthenticationStringConstant.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct AuthenticationStringConstant{
|
||||||
|
static let safeBelow = "Let’s be Safe!"
|
||||||
|
static let safeAbove = "Let’s Start Here"
|
||||||
|
|
||||||
|
static let emailAbove = "CAN WE HAVE YOUR EMAIL?"
|
||||||
|
static let emailBelow = "CAN WE HAVE YOUR PARENT’S EMAIL?"
|
||||||
|
|
||||||
|
// PlaceHolderText
|
||||||
|
static let enterEmail = "Enter your email"
|
||||||
|
static let enterParentsEmail = "Enter your parent's email"
|
||||||
|
static let selectUsername = "Enter a username"
|
||||||
|
static let enterName = "Enter your name"
|
||||||
|
static let enterPassword = "Enter your password"
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
733
WOKA/Authentication/Base.lproj/AuthenticationSB.storyboard
Normal file
@@ -0,0 +1,733 @@
|
|||||||
|
<?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">
|
||||||
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||||
|
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="Exo2-Bold.ttf">
|
||||||
|
<string>Exo2-Bold</string>
|
||||||
|
</array>
|
||||||
|
<array key="Exo2-Medium.ttf">
|
||||||
|
<string>Exo2-Medium</string>
|
||||||
|
</array>
|
||||||
|
<array key="Exo2-Regular.ttf">
|
||||||
|
<string>Exo2-Regular</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
|
<scenes>
|
||||||
|
<!--EmailVC-->
|
||||||
|
<scene sceneID="d9j-IF-0ZE">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="EmailVC" id="Mch-YP-RvY" customClass="EmailVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="xyH-HB-PHf">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="8ZK-w6-Qrb">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="28f-Ou-tkU">
|
||||||
|
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="28f-Ou-tkU" secondAttribute="height" multiplier="8:3" id="CRw-zp-zNS"/>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="ecb-Ds-0NZ"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<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"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="354" height="34"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<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"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="a@a.com" placeholder="Enter your email" 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"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="MQ3-QN-YF3"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" enablesReturnKeyAutomatically="YES" textContentType="email"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</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">
|
||||||
|
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
<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"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="17"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</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">
|
||||||
|
<rect key="frame" x="0.0" y="52" width="354" height="50"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="4eR-zk-hWT"/>
|
||||||
|
</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="Next">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="nextBtnTapped:" destination="Mch-YP-RvY" eventType="touchUpInside" id="B0V-Yn-gKx"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="ttg-h6-Xru"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="ttg-h6-Xru" firstAttribute="trailing" secondItem="kWC-4v-p9x" secondAttribute="trailing" constant="30" id="Aiz-gO-rKU"/>
|
||||||
|
<constraint firstItem="wZZ-TW-F7M" firstAttribute="leading" secondItem="xyH-HB-PHf" secondAttribute="leading" constant="20" id="DMg-QN-pA6"/>
|
||||||
|
<constraint firstItem="ttg-h6-Xru" firstAttribute="trailing" secondItem="8ZK-w6-Qrb" secondAttribute="trailing" id="K37-Mx-ajf"/>
|
||||||
|
<constraint firstItem="28f-Ou-tkU" firstAttribute="top" secondItem="xyH-HB-PHf" secondAttribute="top" constant="50" id="Ozh-zK-f9z"/>
|
||||||
|
<constraint firstItem="8ZK-w6-Qrb" firstAttribute="top" secondItem="xyH-HB-PHf" secondAttribute="top" id="QM1-aC-fjC"/>
|
||||||
|
<constraint firstItem="ttg-h6-Xru" firstAttribute="trailing" secondItem="wZZ-TW-F7M" secondAttribute="trailing" constant="20" id="WAa-0k-8r1"/>
|
||||||
|
<constraint firstItem="28f-Ou-tkU" firstAttribute="centerX" secondItem="8ZK-w6-Qrb" secondAttribute="centerX" id="are-Hl-jNe"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="8ZK-w6-Qrb" secondAttribute="bottom" id="aws-dt-sDv"/>
|
||||||
|
<constraint firstItem="ttg-h6-Xru" firstAttribute="bottom" secondItem="kWC-4v-p9x" secondAttribute="bottom" constant="20" id="cLG-Cn-ePY"/>
|
||||||
|
<constraint firstItem="kWC-4v-p9x" firstAttribute="leading" secondItem="ttg-h6-Xru" secondAttribute="leading" constant="30" id="ey4-4F-Gi2"/>
|
||||||
|
<constraint firstItem="wZZ-TW-F7M" firstAttribute="top" secondItem="28f-Ou-tkU" secondAttribute="bottom" constant="70" id="hWB-EW-iAt"/>
|
||||||
|
<constraint firstItem="8ZK-w6-Qrb" firstAttribute="leading" secondItem="ttg-h6-Xru" secondAttribute="leading" id="p42-pj-p5d"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="2Ni-G3-V0x"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="beSafeLabel" destination="yPx-mT-kaf" id="92c-Lu-g8h"/>
|
||||||
|
<outlet property="emailLabel" destination="STc-F9-ORA" id="HqR-bD-XIR"/>
|
||||||
|
<outlet property="emailVerifyLabel" destination="lqT-ZV-x5p" id="EBo-jq-vYb"/>
|
||||||
|
<outlet property="enterEmailTF" destination="DSB-Ge-wNO" id="D55-hm-xCe"/>
|
||||||
|
<outlet property="nextBtn" destination="zNR-RE-Ax8" id="5Lg-cZ-4HL"/>
|
||||||
|
<outlet property="wokaLogoTopConstriant" destination="Ozh-zK-f9z" id="YEf-Xn-jKl"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="uKC-hK-yO4" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="-696" y="-27"/>
|
||||||
|
</scene>
|
||||||
|
<!--OTPVC-->
|
||||||
|
<scene sceneID="N9n-j1-Hje">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="OTPVC" id="Yeg-Vy-0ZA" customClass="OTPVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="xdz-zP-bYf">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="d15-AB-06K">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="kF6-ix-4nj">
|
||||||
|
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="FC4-VF-29V"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="kF6-ix-4nj" secondAttribute="height" multiplier="8:3" id="Har-Qr-ggl"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<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="247"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="354" height="67.5"/>
|
||||||
|
<string key="text">Please Get the Code
|
||||||
|
Sent to Your Parent’s Email</string>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<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="109.5"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<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"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="81" height="60"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Medium" family="Exo 2" pointSize="18"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||||
|
</textField>
|
||||||
|
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="*" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="42K-Uu-lPQ" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="91" y="0.0" width="81" height="60"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Medium" family="Exo 2" pointSize="18"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||||
|
</textField>
|
||||||
|
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="*" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Hcd-Mm-IxW" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="182" y="0.0" width="81" height="60"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Medium" family="Exo 2" pointSize="18"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||||
|
</textField>
|
||||||
|
<textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="*" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="MpT-bm-drv" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="273" y="0.0" width="81" height="60"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Medium" family="Exo 2" pointSize="18"/>
|
||||||
|
<textInputTraits key="textInputTraits" keyboardType="numberPad"/>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="60" id="wdo-po-1qc"/>
|
||||||
|
</constraints>
|
||||||
|
</stackView>
|
||||||
|
<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="109.5" width="354" height="0.0"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
<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"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="34"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</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">
|
||||||
|
<rect key="frame" x="0.0" y="69" width="354" height="50"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="KmJ-vu-pxT"/>
|
||||||
|
</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="Next">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="nextBtnTapped:" destination="Yeg-Vy-0ZA" eventType="touchUpInside" id="Oly-KJ-kKA"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="nfv-fl-fhY"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="xga-nK-9qJ" firstAttribute="leading" secondItem="nfv-fl-fhY" secondAttribute="leading" constant="30" id="2Dp-Pf-MGJ"/>
|
||||||
|
<constraint firstItem="d15-AB-06K" firstAttribute="leading" secondItem="nfv-fl-fhY" secondAttribute="leading" id="7fw-yV-XZu"/>
|
||||||
|
<constraint firstItem="nfv-fl-fhY" firstAttribute="trailing" secondItem="mhH-Ov-1nU" secondAttribute="trailing" constant="20" id="DcY-qc-HLh"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="d15-AB-06K" secondAttribute="bottom" id="EVj-BX-ofS"/>
|
||||||
|
<constraint firstItem="mhH-Ov-1nU" firstAttribute="leading" secondItem="xdz-zP-bYf" secondAttribute="leading" constant="20" id="Fll-JK-ujv"/>
|
||||||
|
<constraint firstItem="kF6-ix-4nj" firstAttribute="top" secondItem="xdz-zP-bYf" secondAttribute="top" constant="50" id="Plj-68-HPq"/>
|
||||||
|
<constraint firstItem="nfv-fl-fhY" firstAttribute="trailing" secondItem="d15-AB-06K" secondAttribute="trailing" id="VnF-dx-mVi"/>
|
||||||
|
<constraint firstItem="mhH-Ov-1nU" firstAttribute="top" secondItem="kF6-ix-4nj" secondAttribute="bottom" constant="70" id="cTD-Fa-gTh"/>
|
||||||
|
<constraint firstItem="nfv-fl-fhY" firstAttribute="trailing" secondItem="xga-nK-9qJ" secondAttribute="trailing" constant="30" id="fQ9-tZ-uxN"/>
|
||||||
|
<constraint firstItem="d15-AB-06K" firstAttribute="top" secondItem="xdz-zP-bYf" secondAttribute="top" id="fVp-EX-QEw"/>
|
||||||
|
<constraint firstItem="kF6-ix-4nj" firstAttribute="centerX" secondItem="d15-AB-06K" secondAttribute="centerX" id="ovf-cy-7GI"/>
|
||||||
|
<constraint firstItem="nfv-fl-fhY" firstAttribute="bottom" secondItem="xga-nK-9qJ" secondAttribute="bottom" constant="20" id="p7a-Qh-ADf"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="b8q-VK-vwl"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="codeSentLabel" destination="NYC-6J-drr" id="g32-r4-g1l"/>
|
||||||
|
<outlet property="enterCodeLabel" destination="tB6-Qz-8Ez" id="SGr-eL-sFE"/>
|
||||||
|
<outlet property="nextBtn" destination="vVW-Kz-YaV" id="oCe-dA-eea"/>
|
||||||
|
<outlet property="requestThemLabel" destination="M3r-lS-DmW" id="CzM-3U-q7x"/>
|
||||||
|
<outlet property="tf1" destination="81S-Fa-CiD" id="Eir-ru-GLT"/>
|
||||||
|
<outlet property="tf2" destination="42K-Uu-lPQ" id="PnG-VM-sHk"/>
|
||||||
|
<outlet property="tf3" destination="Hcd-Mm-IxW" id="HrM-fm-bRo"/>
|
||||||
|
<outlet property="tf4" destination="MpT-bm-drv" id="Gih-8m-Fl9"/>
|
||||||
|
<outlet property="wokaLogoTopConstriant" destination="Plj-68-HPq" id="iiN-K2-PGJ"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="XEO-Ee-iKz" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="41" y="-27"/>
|
||||||
|
</scene>
|
||||||
|
<!--User Details RegisterVC-->
|
||||||
|
<scene sceneID="wyQ-Rp-Q1h">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="UserDetailsRegisterVC" id="MyJ-bq-ekO" customClass="UserDetailsRegisterVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="VpN-eA-ll3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="owo-BQ-q03">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="3uH-t8-hYF">
|
||||||
|
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="MyE-Df-oTg"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="3uH-t8-hYF" secondAttribute="height" multiplier="8:3" id="PEA-Ql-z37"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<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="540.5"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="354" height="65"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<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="405.5"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="qSD-g5-OZA">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="99.5"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your name" 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"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="XQt-fy-rey"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" textContentType="name"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</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">
|
||||||
|
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="LUQ-BX-nHw">
|
||||||
|
<rect key="frame" x="0.0" y="129.5" width="354" height="99.5"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" 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"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="s2f-b9-xgY"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" textContentType="username"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</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">
|
||||||
|
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<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="99.5"/>
|
||||||
|
<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">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" 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"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="tintColor" name="TextDarkBlue"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="s5g-2j-BWF"/>
|
||||||
|
</constraints>
|
||||||
|
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="emailAddress" enablesReturnKeyAutomatically="YES" textContentType="email"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
|
||||||
|
<real key="value" value="25"/>
|
||||||
|
</userDefinedRuntimeAttribute>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
|
</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="lyv-wM-y12">
|
||||||
|
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<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="388.5" width="354" height="17"/>
|
||||||
|
<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"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="EvA-Qj-QKv">
|
||||||
|
<rect key="frame" x="30" y="792" width="354" height="50"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Kqz-rN-BEF" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="354" height="50"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="VxZ-hu-QVD"/>
|
||||||
|
</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="Next">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="nextBtnTapped:" destination="MyJ-bq-ekO" eventType="touchUpInside" id="uMg-oZ-SbZ"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="5pw-Iu-Wpd"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="5pw-Iu-Wpd" firstAttribute="trailing" secondItem="owo-BQ-q03" secondAttribute="trailing" id="4wW-gl-5z5"/>
|
||||||
|
<constraint firstItem="owo-BQ-q03" firstAttribute="leading" secondItem="5pw-Iu-Wpd" secondAttribute="leading" id="DuU-RI-0OW"/>
|
||||||
|
<constraint firstItem="5pw-Iu-Wpd" firstAttribute="trailing" secondItem="L80-bN-1T0" secondAttribute="trailing" constant="20" id="SLL-hJ-Tq0"/>
|
||||||
|
<constraint firstItem="5pw-Iu-Wpd" firstAttribute="bottom" secondItem="EvA-Qj-QKv" secondAttribute="bottom" constant="20" id="SjJ-bu-ptM"/>
|
||||||
|
<constraint firstItem="EvA-Qj-QKv" firstAttribute="leading" secondItem="5pw-Iu-Wpd" secondAttribute="leading" constant="30" id="Tri-Ey-BJe"/>
|
||||||
|
<constraint firstItem="owo-BQ-q03" firstAttribute="top" secondItem="VpN-eA-ll3" secondAttribute="top" id="VbB-Vc-lO9"/>
|
||||||
|
<constraint firstItem="5pw-Iu-Wpd" firstAttribute="trailing" secondItem="EvA-Qj-QKv" secondAttribute="trailing" constant="30" id="Vzg-K8-35e"/>
|
||||||
|
<constraint firstItem="L80-bN-1T0" firstAttribute="leading" secondItem="VpN-eA-ll3" secondAttribute="leading" constant="20" id="d1q-3N-6ue"/>
|
||||||
|
<constraint firstItem="3uH-t8-hYF" firstAttribute="centerX" secondItem="owo-BQ-q03" secondAttribute="centerX" id="hlr-Rg-23t"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="owo-BQ-q03" secondAttribute="bottom" id="rba-mw-YXY"/>
|
||||||
|
<constraint firstItem="L80-bN-1T0" firstAttribute="top" secondItem="3uH-t8-hYF" secondAttribute="bottom" constant="70" id="rik-Hy-wqV"/>
|
||||||
|
<constraint firstItem="3uH-t8-hYF" firstAttribute="top" secondItem="VpN-eA-ll3" secondAttribute="top" constant="50" id="s9Y-ki-uEK"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="as0-6B-j9I"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="enterNameTF" destination="tgW-LH-XfR" id="4Vt-ub-4z2"/>
|
||||||
|
<outlet property="enterPasswordTF" destination="4gw-z0-s4a" id="0nn-80-Rli"/>
|
||||||
|
<outlet property="enterUserNameTF" destination="m50-FZ-yVO" id="dNR-QE-LZs"/>
|
||||||
|
<outlet property="nextBtn" destination="Kqz-rN-BEF" id="Lyc-Tb-K5U"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Bow-7Q-7qp" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="799" y="-27"/>
|
||||||
|
</scene>
|
||||||
|
<!--User IntrestVC-->
|
||||||
|
<scene sceneID="T5g-K3-JbZ">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="UserIntrestVC" id="cJN-jE-dFM" customClass="UserIntrestVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="cAe-Mf-lsK">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="YXE-BY-CLo">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tyX-OO-8o2">
|
||||||
|
<rect key="frame" x="0.0" y="48" width="414" height="814"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="VdK-J5-rgR">
|
||||||
|
<rect key="frame" x="0.0" y="30" width="414" height="556"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="03q-h4-3f0">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="394" height="68"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Nice to meet you," textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pix-7E-Qy7">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="31.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="26"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5fJ-Y1-sF5">
|
||||||
|
<rect key="frame" x="0.0" y="36.5" width="394" height="31.5"/>
|
||||||
|
<attributedString key="attributedText">
|
||||||
|
<fragment content="Vijay">
|
||||||
|
<attributes>
|
||||||
|
<color key="NSColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<font key="NSFont" size="26" name="Exo2-Bold"/>
|
||||||
|
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||||
|
</attributes>
|
||||||
|
</fragment>
|
||||||
|
</attributedString>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Can we know a bit more about you?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SDb-xl-JQx">
|
||||||
|
<rect key="frame" x="10" y="98" width="394" height="26.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="22"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="3iR-vv-IUk">
|
||||||
|
<rect key="frame" x="10" y="154.5" width="394" height="138"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="YOUR GENDER" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GuV-CV-Huq">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="22"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="50" translatesAutoresizingMaskIntoConstraints="NO" id="UBH-i2-Wx5">
|
||||||
|
<rect key="frame" x="0.0" y="38" width="394" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vzD-bQ-1cP">
|
||||||
|
<rect key="frame" x="30" y="0.0" width="142" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="cMG-wb-u14">
|
||||||
|
<rect key="frame" x="46.5" y="10" width="49.5" height="72"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Boy" translatesAutoresizingMaskIntoConstraints="NO" id="tci-wS-ZxN">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="49.5" height="50"/>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="BOY" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nnY-MI-513">
|
||||||
|
<rect key="frame" x="0.0" y="50" width="49.5" height="22"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="cMG-wb-u14" firstAttribute="centerX" secondItem="vzD-bQ-1cP" secondAttribute="centerX" id="0Kj-gB-edb"/>
|
||||||
|
<constraint firstItem="cMG-wb-u14" firstAttribute="top" secondItem="vzD-bQ-1cP" secondAttribute="top" constant="10" id="WI4-qh-xwP"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Ik-wa-umx">
|
||||||
|
<rect key="frame" x="222" y="0.0" width="142" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="yXQ-aC-gR1">
|
||||||
|
<rect key="frame" x="47" y="10" width="48.5" height="72"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Girl" translatesAutoresizingMaskIntoConstraints="NO" id="Fqa-vi-auf">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="48.5" height="50"/>
|
||||||
|
</imageView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GIRL" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K9G-cT-fBK">
|
||||||
|
<rect key="frame" x="0.0" y="50" width="48.5" height="22"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="yXQ-aC-gR1" firstAttribute="top" secondItem="6Ik-wa-umx" secondAttribute="top" constant="10" id="K2z-I7-Qxq"/>
|
||||||
|
<constraint firstItem="yXQ-aC-gR1" firstAttribute="centerX" secondItem="6Ik-wa-umx" secondAttribute="centerX" id="sdg-WB-W4p"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="100" id="TCe-xi-kO9"/>
|
||||||
|
</constraints>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="30" bottom="0.0" right="30"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="713-kI-2TZ">
|
||||||
|
<rect key="frame" x="10" y="322.5" width="394" height="132"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WHEN IS YOUR BIRTHDAY?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="J83-KL-Pex">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="22"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<datePicker contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="date" style="wheels" translatesAutoresizingMaskIntoConstraints="NO" id="QrL-xJ-2yI">
|
||||||
|
<rect key="frame" x="0.0" y="32" width="394" height="100"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="100" id="uDd-Ik-9bt"/>
|
||||||
|
</constraints>
|
||||||
|
</datePicker>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WHEN ARE YOUR INTRESTS?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="agP-Pb-cQD">
|
||||||
|
<rect key="frame" x="10" y="484.5" width="394" height="22"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Select as many as you want" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LYR-yD-QKs">
|
||||||
|
<rect key="frame" x="10" y="536.5" width="394" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="OHA-L6-olC" firstAttribute="bottom" secondItem="VdK-J5-rgR" secondAttribute="bottom" id="A4j-Yl-reT"/>
|
||||||
|
<constraint firstItem="VdK-J5-rgR" firstAttribute="leading" secondItem="OHA-L6-olC" secondAttribute="leading" id="JMQ-LC-HYL"/>
|
||||||
|
<constraint firstItem="VdK-J5-rgR" firstAttribute="top" secondItem="tyX-OO-8o2" secondAttribute="top" constant="30" id="WQq-91-b9o"/>
|
||||||
|
<constraint firstItem="VdK-J5-rgR" firstAttribute="width" secondItem="OHA-L6-olC" secondAttribute="width" id="wXz-8T-OB4"/>
|
||||||
|
<constraint firstItem="mpe-FM-ECN" firstAttribute="trailing" secondItem="VdK-J5-rgR" secondAttribute="trailing" id="xaU-89-Bc5"/>
|
||||||
|
</constraints>
|
||||||
|
<viewLayoutGuide key="contentLayoutGuide" id="OHA-L6-olC"/>
|
||||||
|
<viewLayoutGuide key="frameLayoutGuide" id="mpe-FM-ECN"/>
|
||||||
|
</scrollView>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hAv-PV-elG" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="30" y="812" width="354" height="50"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="50" id="3O5-pI-43j"/>
|
||||||
|
</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="Next">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="nextBtnTapped:" destination="Yeg-Vy-0ZA" eventType="touchUpInside" id="aL8-ue-HWX"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="foj-UB-yJK"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="YXE-BY-CLo" firstAttribute="leading" secondItem="foj-UB-yJK" secondAttribute="leading" id="JN0-oN-QAw"/>
|
||||||
|
<constraint firstItem="tyX-OO-8o2" firstAttribute="bottom" secondItem="foj-UB-yJK" secondAttribute="bottom" id="NOb-CN-qZc"/>
|
||||||
|
<constraint firstItem="foj-UB-yJK" firstAttribute="trailing" secondItem="YXE-BY-CLo" secondAttribute="trailing" id="RJ4-RM-4oI"/>
|
||||||
|
<constraint firstItem="tyX-OO-8o2" firstAttribute="top" secondItem="foj-UB-yJK" secondAttribute="top" id="UYo-ev-rGX"/>
|
||||||
|
<constraint firstItem="tyX-OO-8o2" firstAttribute="leading" secondItem="foj-UB-yJK" secondAttribute="leading" id="X2N-pX-DNK"/>
|
||||||
|
<constraint firstItem="foj-UB-yJK" firstAttribute="bottom" secondItem="hAv-PV-elG" secondAttribute="bottom" id="a0f-Rb-HMB"/>
|
||||||
|
<constraint firstItem="tyX-OO-8o2" firstAttribute="trailing" secondItem="foj-UB-yJK" secondAttribute="trailing" id="aqh-4x-hox"/>
|
||||||
|
<constraint firstItem="YXE-BY-CLo" firstAttribute="top" secondItem="cAe-Mf-lsK" secondAttribute="top" id="bd4-5g-gQk"/>
|
||||||
|
<constraint firstItem="foj-UB-yJK" firstAttribute="trailing" secondItem="hAv-PV-elG" secondAttribute="trailing" constant="30" id="vhA-ui-fMg"/>
|
||||||
|
<constraint firstItem="hAv-PV-elG" firstAttribute="leading" secondItem="foj-UB-yJK" secondAttribute="leading" constant="30" id="xTU-It-yee"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="YXE-BY-CLo" secondAttribute="bottom" id="xTr-fi-VFU"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="gHq-kx-Fzi"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="boyView" destination="vzD-bQ-1cP" id="Sq8-2n-ZeA"/>
|
||||||
|
<outlet property="datePicker" destination="QrL-xJ-2yI" id="KD6-A4-7fS"/>
|
||||||
|
<outlet property="girlView" destination="6Ik-wa-umx" id="JOO-44-pWF"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="1l2-jy-JLN" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1576.8115942028987" y="-27.455357142857142"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<designables>
|
||||||
|
<designable name="42K-Uu-lPQ">
|
||||||
|
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="4gw-z0-s4a">
|
||||||
|
<size key="intrinsicContentSize" width="200.5" height="21"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="81S-Fa-CiD">
|
||||||
|
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="DSB-Ge-wNO">
|
||||||
|
<size key="intrinsicContentSize" width="169" height="21"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="Hcd-Mm-IxW">
|
||||||
|
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="MpT-bm-drv">
|
||||||
|
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="m50-FZ-yVO">
|
||||||
|
<size key="intrinsicContentSize" width="201.5" height="21"/>
|
||||||
|
</designable>
|
||||||
|
<designable name="tgW-LH-XfR">
|
||||||
|
<size key="intrinsicContentSize" width="169.5" height="21"/>
|
||||||
|
</designable>
|
||||||
|
</designables>
|
||||||
|
<resources>
|
||||||
|
<image name="BackgroundSplash" width="428" height="926"/>
|
||||||
|
<image name="Boy" width="49.5" height="50"/>
|
||||||
|
<image name="Girl" width="48.5" height="50"/>
|
||||||
|
<image name="WokaLogo" width="2224" height="450.5"/>
|
||||||
|
<namedColor name="TextDarkBlue">
|
||||||
|
<color red="0.10599999874830246" green="0.050999999046325684" blue="0.60399997234344482" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</namedColor>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
66
WOKA/Authentication/Controller/EmailVC.swift
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
//
|
||||||
|
// EmailVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class EmailVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var nextBtn: LocalisedElementsButton!
|
||||||
|
@IBOutlet weak var enterEmailTF: UITextField!
|
||||||
|
@IBOutlet weak var wokaLogoTopConstriant: NSLayoutConstraint!
|
||||||
|
|
||||||
|
@IBOutlet weak var beSafeLabel: UILabel!
|
||||||
|
@IBOutlet weak var emailLabel: UILabel!
|
||||||
|
@IBOutlet weak var emailVerifyLabel: LocalisedElementsLabel!
|
||||||
|
|
||||||
|
var vm = EmailVM()
|
||||||
|
|
||||||
|
// MARK: - LifeCycle
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initView()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
guard let self else{return}
|
||||||
|
//validate email fiirst
|
||||||
|
let emailValidate = EmailValidation(email: enterEmailTF.text!).validate()
|
||||||
|
if emailValidate != .isCorrect{
|
||||||
|
enterEmailTF.rightView?.isHidden = false
|
||||||
|
enterEmailTF.setError(emailValidate.rawValue, show: true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.oTPVC) as! OTPVC
|
||||||
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extension EmailVC : UITextFieldDelegate{
|
||||||
|
|
||||||
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
80
WOKA/Authentication/Controller/OTPVC.swift
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
//
|
||||||
|
// OTPVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class OTPVC : UIViewController{
|
||||||
|
|
||||||
|
@IBOutlet weak var wokaLogoTopConstriant: NSLayoutConstraint!
|
||||||
|
|
||||||
|
@IBOutlet weak var tf1: UITextField!
|
||||||
|
@IBOutlet weak var tf2: UITextField!
|
||||||
|
@IBOutlet weak var tf3: UITextField!
|
||||||
|
@IBOutlet weak var tf4: UITextField!
|
||||||
|
@IBOutlet weak var nextBtn: LocalisedElementsButton!
|
||||||
|
|
||||||
|
@IBOutlet weak var codeSentLabel: UILabel!
|
||||||
|
@IBOutlet weak var enterCodeLabel: UILabel!
|
||||||
|
@IBOutlet weak var requestThemLabel: LocalisedElementsLabel!
|
||||||
|
|
||||||
|
var vm = OTPVM()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initView()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Button Tap Handler
|
||||||
|
|
||||||
|
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userDetailsRegisterVC) as! UserDetailsRegisterVC
|
||||||
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - TextField Delegate
|
||||||
|
|
||||||
|
extension OTPVC : UITextFieldDelegate{
|
||||||
|
|
||||||
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
|
||||||
|
// Check if the input text contains only numbers
|
||||||
|
if !string.onlyNumber(){return false}
|
||||||
|
|
||||||
|
// If user pastes text into the text field, check the count and process accordingly
|
||||||
|
if string.count == 4{
|
||||||
|
self.vm.textFieldDidChange(textField, otpCode: string)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit the input to one character
|
||||||
|
let maxLength = 1
|
||||||
|
let currentString = (textField.text ?? "") as NSString
|
||||||
|
let newString = currentString.replacingCharacters(in: range, with: string)
|
||||||
|
return newString.count <= maxLength
|
||||||
|
}
|
||||||
|
|
||||||
|
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
|
||||||
|
// Check if the pasted text contains the content of the general pasteboard
|
||||||
|
if text.contains(UIPasteboard.general.string ?? "") {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
48
WOKA/Authentication/Controller/UserDetailsRegisterVC.swift
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
//
|
||||||
|
// UserDetailsRegisterVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class UserDetailsRegisterVC : UIViewController{
|
||||||
|
|
||||||
|
@IBOutlet weak var nextBtn: LocalisedElementsButton!
|
||||||
|
@IBOutlet weak var enterNameTF: TextFieldShadow!
|
||||||
|
@IBOutlet weak var enterUserNameTF: TextFieldShadow!
|
||||||
|
@IBOutlet weak var enterPasswordTF: TextFieldShadow!
|
||||||
|
|
||||||
|
var vm = UserDetailsRegisterVM()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initView()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Button Tap Handler
|
||||||
|
|
||||||
|
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userIntrestVC) as! UserIntrestVC
|
||||||
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Textfield Delegate
|
||||||
|
|
||||||
|
extension UserDetailsRegisterVC : UITextFieldDelegate{
|
||||||
|
|
||||||
|
}
|
||||||
28
WOKA/Authentication/Controller/UserIntrestVC.swift
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// UserIntrestVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 30/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class UserIntrestVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var boyView: UIView!
|
||||||
|
@IBOutlet weak var girlView: UIView!
|
||||||
|
@IBOutlet weak var datePicker: UIDatePicker!
|
||||||
|
|
||||||
|
var vm = UserIntrestVM()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initView()
|
||||||
|
|
||||||
|
boyView.roundCorner(radius: 25)
|
||||||
|
girlView.roundCorner(radius: 25)
|
||||||
|
datePicker.setValue(UIColor.appColor(.TextDarkBlue), forKeyPath: "textColor")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
49
WOKA/Authentication/ViewModel/EmailVM.swift
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// EmailVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class EmailVM{
|
||||||
|
|
||||||
|
weak var vc : EmailVC!
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
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.nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
|
||||||
|
vc.nextBtn.roundCorner()
|
||||||
|
vc.enterEmailTF.roundCorner()
|
||||||
|
|
||||||
|
// Set up text field delegate
|
||||||
|
vc.enterEmailTF.delegate = vc.self
|
||||||
|
|
||||||
|
vc.enterEmailTF.addRightButton(title: "", tintColor: UIColor.red, btnImage: UIImage(systemName: "exclamationmark.circle.fill"), target: self, action: #selector(validationIconTapped))
|
||||||
|
vc.enterEmailTF.rightView?.isHidden = true
|
||||||
|
|
||||||
|
self.vc.wokaLogoTopConstriant.constant = CheckPhoneHomeBtnOrNotch.shareInstance.topConstriant()
|
||||||
|
|
||||||
|
//Checking UserType to update the text
|
||||||
|
if AuthFunc.shareInstance.userType == .adult{
|
||||||
|
vc.enterEmailTF.placeholder = K.AuthenticationStringConstant.enterEmail.localized(loc: K.GVar.localized)
|
||||||
|
vc.emailVerifyLabel.isHidden = true
|
||||||
|
vc.beSafeLabel.text = K.AuthenticationStringConstant.safeAbove.localized(loc: K.GVar.localized)
|
||||||
|
vc.emailLabel.text = K.AuthenticationStringConstant.emailAbove.localized(loc: K.GVar.localized)
|
||||||
|
}else{
|
||||||
|
vc.enterEmailTF.placeholder = K.AuthenticationStringConstant.enterParentsEmail.localized(loc: K.GVar.localized)
|
||||||
|
vc.beSafeLabel.text = K.AuthenticationStringConstant.safeBelow.localized(loc: K.GVar.localized)
|
||||||
|
vc.emailLabel.text = K.AuthenticationStringConstant.emailBelow.localized(loc: K.GVar.localized)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to handle tap on validation icon
|
||||||
|
@objc func validationIconTapped() {
|
||||||
|
let errorView = errorViews.object(forKey: vc.enterEmailTF)
|
||||||
|
if let errorView = errorView {
|
||||||
|
errorView.isHidden.toggle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
104
WOKA/Authentication/ViewModel/OTPVM.swift
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
//
|
||||||
|
// OTPVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class OTPVM{
|
||||||
|
|
||||||
|
weak var vc : OTPVC!
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
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.nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
|
||||||
|
vc.nextBtn.roundCorner()
|
||||||
|
|
||||||
|
self.vc.wokaLogoTopConstriant.constant = CheckPhoneHomeBtnOrNotch.shareInstance.topConstriant()
|
||||||
|
tfMod(textField: [vc.tf1, vc.tf2, vc.tf3, vc.tf4])
|
||||||
|
|
||||||
|
if AuthFunc.shareInstance.userType == .adult{
|
||||||
|
vc.codeSentLabel.text = "Please Get the OTP Sent to Your Email".localized(loc: K.GVar.localized)
|
||||||
|
vc.enterCodeLabel.text = "PLEASE ENTER THE OTP".localized(loc: K.GVar.localized)
|
||||||
|
vc.requestThemLabel.text = "Don’t forget to check your JUNK/SPAM folder".localized(loc: K.GVar.localized)
|
||||||
|
}else{
|
||||||
|
vc.codeSentLabel.text = "Please Get the Code Sent to Your Parent’s Email".localized(loc: K.GVar.localized)
|
||||||
|
vc.enterCodeLabel.text = "PLEASE ENTER THE CODE".localized(loc: K.GVar.localized)
|
||||||
|
vc.requestThemLabel.text = "Request them for the verfication code to activate your account".localized(loc: K.GVar.localized)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func tfMod(textField : [UITextField]){
|
||||||
|
for i in textField{
|
||||||
|
i.roundCorner(radius: i.frame.height / 2)
|
||||||
|
i.delegate = vc.self
|
||||||
|
i.textContentType = .oneTimeCode
|
||||||
|
i.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControl.Event.editingChanged)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - TextField OTp handling
|
||||||
|
|
||||||
|
func textFieldDidChange(_ textField: UITextField, otpCode: String) {
|
||||||
|
if textField.textContentType == UITextContentType.oneTimeCode{
|
||||||
|
//here split the text to your four text fields
|
||||||
|
if otpCode.count == 4, Int(otpCode) != nil {
|
||||||
|
vc.tf1.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 0)])
|
||||||
|
vc.tf2.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 1)])
|
||||||
|
vc.tf3.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 2)])
|
||||||
|
vc.tf4.text = String(otpCode[otpCode.index(otpCode.startIndex, offsetBy: 3)])
|
||||||
|
|
||||||
|
// let textFields = [vc.tf1,vc.tf2,vc.tf3,vc.tf4]
|
||||||
|
// for i in 0..<textFields.count{
|
||||||
|
// textFields[i].layer.borderColor = UIColor.GREEN_COLOR.cgColor
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
textField.text = ""
|
||||||
|
}
|
||||||
|
textField.resignFirstResponder()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func emptyTF(tf : [UITextField]){
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
for i in tf{
|
||||||
|
i.text = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func textFieldDidChange(textField: UITextField){
|
||||||
|
let text = textField.text
|
||||||
|
if text?.count == 1 {
|
||||||
|
switch textField{
|
||||||
|
case vc.tf1:
|
||||||
|
vc.tf2.becomeFirstResponder()
|
||||||
|
case vc.tf2:
|
||||||
|
vc.tf3.becomeFirstResponder()
|
||||||
|
case vc.tf3:
|
||||||
|
vc.tf4.becomeFirstResponder()
|
||||||
|
case vc.tf4:
|
||||||
|
vc.tf4.resignFirstResponder()
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if text?.count == 0 {
|
||||||
|
switch textField{
|
||||||
|
case vc.tf1:
|
||||||
|
vc.tf1.becomeFirstResponder()
|
||||||
|
case vc.tf2:
|
||||||
|
vc.tf1.becomeFirstResponder()
|
||||||
|
case vc.tf3:
|
||||||
|
vc.tf2.becomeFirstResponder()
|
||||||
|
case vc.tf4:
|
||||||
|
vc.tf3.becomeFirstResponder()
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
WOKA/Authentication/ViewModel/UserDetailsRegisterVM.swift
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// UserDetailsRegisterVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class UserDetailsRegisterVM{
|
||||||
|
|
||||||
|
weak var vc : UserDetailsRegisterVC!
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
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.nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
|
||||||
|
vc.nextBtn.roundCorner()
|
||||||
|
tfMod(textField: [vc.enterNameTF, vc.enterPasswordTF, vc.enterUserNameTF])
|
||||||
|
hindiEnglishLanguage()
|
||||||
|
}
|
||||||
|
|
||||||
|
func hindiEnglishLanguage(){
|
||||||
|
vc.enterNameTF.placeholder = K.AuthenticationStringConstant.enterName.localized(loc: K.GVar.localized)
|
||||||
|
vc.enterUserNameTF.placeholder = K.AuthenticationStringConstant.selectUsername.localized(loc: K.GVar.localized)
|
||||||
|
vc.enterPasswordTF.placeholder = K.AuthenticationStringConstant.enterPassword.localized(loc: K.GVar.localized)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func tfMod(textField : [UITextField]){
|
||||||
|
for i in textField{
|
||||||
|
i.roundCorner(radius: i.frame.height / 2)
|
||||||
|
i.delegate = vc.self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
WOKA/Authentication/ViewModel/UserIntrestVM.swift
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// UserIntrestVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 30/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
class UserIntrestVM{
|
||||||
|
|
||||||
|
weak var vc : UserIntrestVC!
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
2
WOKA/Authentication/en.lproj/AuthenticationSB.strings
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
|
||||||
6
WOKA/Authentication/hi.lproj/AuthenticationSB.strings
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "हिंदी"; ObjectID = "SYp-e1-w6s"; */
|
||||||
|
"SYp-e1-w6s.normalTitle" = "हिंदी";
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "English"; ObjectID = "XdB-NB-osA"; */
|
||||||
|
"XdB-NB-osA.normalTitle" = "English";
|
||||||
30
WOKA/Authentication/mul.lproj/AuthenticationSB.xcstrings
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"sourceLanguage" : "en",
|
||||||
|
"strings" : {
|
||||||
|
"STc-F9-ORA.text" : {
|
||||||
|
"comment" : "Class = \"UILabel\"; text = \"CAN WE HAVE YOUR EMAIL?\"; ObjectID = \"STc-F9-ORA\";",
|
||||||
|
"extractionState" : "extracted_with_value",
|
||||||
|
"localizations" : {
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "new",
|
||||||
|
"value" : "CAN WE HAVE YOUR EMAIL?"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yPx-mT-kaf.text" : {
|
||||||
|
"comment" : "Class = \"UILabel\"; text = \"Let’s Start Here\"; ObjectID = \"yPx-mT-kaf\";",
|
||||||
|
"extractionState" : "extracted_with_value",
|
||||||
|
"localizations" : {
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "new",
|
||||||
|
"value" : "Let’s Start Here"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version" : "1.0"
|
||||||
|
}
|
||||||
45
WOKA/Base.lproj/LaunchScreen.storyboard
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?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" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="8v1-SP-QP0">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="8v1-SP-QP0" secondAttribute="bottom" id="53S-Io-tSh"/>
|
||||||
|
<constraint firstItem="8v1-SP-QP0" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="DZq-d9-ryJ"/>
|
||||||
|
<constraint firstItem="8v1-SP-QP0" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="E7C-iB-TDx"/>
|
||||||
|
<constraint firstItem="8v1-SP-QP0" firstAttribute="trailing" secondItem="6Tk-OE-BBY" secondAttribute="trailing" id="G7L-G0-AS5"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="52.671755725190835" y="374.64788732394368"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="BackgroundSplash" width="428" height="926"/>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
18
WOKA/Constants K/CellIdentifier.swift
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// CellIdentifier.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct CellIdentifier{
|
||||||
|
|
||||||
|
struct OnBoarding{
|
||||||
|
static let onBoardCell = "OnBoardCell"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
WOKA/Constants K/Constant.swift
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// Constant.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct K {
|
||||||
|
|
||||||
|
}
|
||||||
16
WOKA/Constants K/GVar.swift
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// GVar.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct GVar{
|
||||||
|
static var localized = K.LocalizedEnum.english
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
15
WOKA/Constants K/LocalizedEnum.swift
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// LocalizedEnum.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
enum LocalizedEnum{
|
||||||
|
static let hindi = "hi"
|
||||||
|
static let english = "en"
|
||||||
|
}
|
||||||
|
}
|
||||||
108
WOKA/Constants K/OnBoardVM.swift
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
//
|
||||||
|
// OnBoardVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import Lottie
|
||||||
|
|
||||||
|
class OnBoardVM{
|
||||||
|
|
||||||
|
weak var vc : OnBoardVC!
|
||||||
|
private var animationView: LottieAnimationView?
|
||||||
|
|
||||||
|
var data : [CarouselData]?
|
||||||
|
|
||||||
|
func initData(){
|
||||||
|
//Animate background
|
||||||
|
animateWokaLogo()
|
||||||
|
|
||||||
|
//Play Sound globally
|
||||||
|
playBackGroundAnimationJSON()
|
||||||
|
|
||||||
|
//Gradient and round corner for button
|
||||||
|
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
|
||||||
|
let color2 = #colorLiteral(red: 0.4862745098, green: 0.1960784314, blue: 0.7019607843, alpha: 1)
|
||||||
|
let color3 = #colorLiteral(red: 0.968627451, green: 0.7882352941, blue: 0.1294117647, alpha: 1)
|
||||||
|
let color4 = #colorLiteral(red: 0.968627451, green: 0.4196078431, blue: 0.1098039216, alpha: 1)
|
||||||
|
let color5 = #colorLiteral(red: 0.6666666667, green: 0.6666666667, blue: 0.231372549, alpha: 1)
|
||||||
|
let color6 = #colorLiteral(red: 0.09803921569, green: 0.4392156863, blue: 0.4156862745, alpha: 1)
|
||||||
|
vc.createAccountBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
|
||||||
|
vc.loginBtn.applyGradient(colors: [color4, color3], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
|
||||||
|
vc.loginAsGuestBtn.applyGradient(colors: [color6, color5], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
|
||||||
|
|
||||||
|
vc.createAccountBtn.roundCorner()
|
||||||
|
vc.loginBtn.roundCorner()
|
||||||
|
vc.loginAsGuestBtn.roundCorner()
|
||||||
|
|
||||||
|
// Setting button text to localize
|
||||||
|
vc.createAccountBtn.setTitle("CREATE YOUR ACCOUNT".localized(loc: K.GVar.localized), for: .normal)
|
||||||
|
vc.loginBtn.setTitle("LOGIN".localized(loc: K.GVar.localized), for: .normal)
|
||||||
|
vc.loginAsGuestBtn.setTitle("Continue as a Guest".localized(loc: K.GVar.localized), for: .normal)
|
||||||
|
|
||||||
|
// Init Collection Data
|
||||||
|
vc.pageControl.numberOfPages = 3
|
||||||
|
data = [CarouselData(title: "Watch, Listen & Play".localized(loc: K.GVar.localized), desc: "LIVE TV, VIDEOS, GAMES, AND AUDIO BOOKS".localized(loc: K.GVar.localized), image: "Slide1"),
|
||||||
|
CarouselData(title: "Sing-Along and Shop".localized(loc: K.GVar.localized), desc: "", image: "Slide2"),
|
||||||
|
CarouselData(title: "Lets all go to WOKALAND".localized(loc: K.GVar.localized), desc: "".localized(loc: K.GVar.localized), image: "Slide3")]
|
||||||
|
|
||||||
|
//Setup CollectionView
|
||||||
|
setupCell()
|
||||||
|
|
||||||
|
//after all setup animate the bottom stack to appear
|
||||||
|
UIView.animate(withDuration: 0.3, delay: 0.4, options: .transitionCrossDissolve, animations: {
|
||||||
|
self.vc.mainStack.alpha = 1
|
||||||
|
}, completion: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func animateWokaLogo(){
|
||||||
|
var topConstriant = CheckPhoneHomeBtnOrNotch.shareInstance.topConstriant()
|
||||||
|
UIView.animate(withDuration: 0.6, animations: {
|
||||||
|
|
||||||
|
self.vc.wokaLogoTopConstriant.constant = topConstriant
|
||||||
|
|
||||||
|
// Inform the layout system to update
|
||||||
|
self.vc.view.layoutIfNeeded()
|
||||||
|
// Unhide the view with cross dissolve animation and delay
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupCell(){
|
||||||
|
vc.carouselCV.register(UINib(nibName: K.CellIdentifier.OnBoarding.onBoardCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.OnBoarding.onBoardCell)
|
||||||
|
vc.carouselCV.delegate = vc.self
|
||||||
|
vc.carouselCV.dataSource = vc.self
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Background animation
|
||||||
|
|
||||||
|
func playBackGroundAnimationJSON(){
|
||||||
|
|
||||||
|
animationView = .init(name: K.StaticFilesString.passingCloud)
|
||||||
|
animationView!.frame = vc.viewLottie.bounds
|
||||||
|
|
||||||
|
//Set animation content mode
|
||||||
|
animationView!.contentMode = .scaleAspectFill
|
||||||
|
|
||||||
|
//Set animation loop mode
|
||||||
|
animationView!.loopMode = .loop
|
||||||
|
animationView?.backgroundBehavior = .pauseAndRestore
|
||||||
|
|
||||||
|
//Adjust animation speed
|
||||||
|
animationView!.animationSpeed = 1
|
||||||
|
|
||||||
|
vc.viewLottie.addSubview(animationView!)
|
||||||
|
|
||||||
|
//Play animation
|
||||||
|
animationView!.play()
|
||||||
|
}
|
||||||
|
|
||||||
|
func stopBackGroundAnimationJSON(){
|
||||||
|
animationView?.pause()
|
||||||
|
}
|
||||||
|
|
||||||
|
func resumeBackGroundAnimationJSON(){
|
||||||
|
animationView?.play()
|
||||||
|
}
|
||||||
|
}
|
||||||
17
WOKA/Constants K/StaticFilesString.swift
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// StaticFilesString.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct StaticFilesString{
|
||||||
|
static let wokaSplashSound = "WokaSplashSound"
|
||||||
|
static let onBoardMainSound = "OnBoardMainSound"
|
||||||
|
static let passingCloud = "PassingCloud"
|
||||||
|
}
|
||||||
|
}
|
||||||
16
WOKA/Constants K/StoryBoard.swift
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// StoryBoard.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct StoryBoard{
|
||||||
|
static let main = "Main"
|
||||||
|
static let authenticationSB = "AuthenticationSB"
|
||||||
|
}
|
||||||
|
}
|
||||||
28
WOKA/Constants K/StoryBoardID.swift
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// StoryBoard.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
struct StoryBoardID{
|
||||||
|
|
||||||
|
struct OnBoarding{
|
||||||
|
static let splashVC = "SplashVC"
|
||||||
|
static let onBoardVC = "OnBoardVC"
|
||||||
|
static let selectAgeVC = "SelectAgeVC"
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Authentication{
|
||||||
|
static let emailVC = "EmailVC"
|
||||||
|
static let oTPVC = "OTPVC"
|
||||||
|
static let userDetailsRegisterVC = "UserDetailsRegisterVC"
|
||||||
|
static let userIntrestVC = "UserIntrestVC"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
21
WOKA/Constants K/UserDefaultsStruct.swift
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension K{
|
||||||
|
|
||||||
|
/**
|
||||||
|
This is not for external use!
|
||||||
|
This should only be used for storing the defaults
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct UserDefaultsStruct{
|
||||||
|
// App Update
|
||||||
|
static let appUpdateSkipVer = "appUpdateSkipVer"
|
||||||
|
}
|
||||||
|
}
|
||||||
19
WOKA/Helpers/AssetColor.swift
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// AssetColor.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
enum AssetsColor: String {
|
||||||
|
case TextDarkBlue
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UIColor {
|
||||||
|
static func appColor(_ name: AssetsColor) -> UIColor? {
|
||||||
|
return UIColor(named: name.rawValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
59
WOKA/Helpers/CheckPhoneHomeBtnOrNotch.swift
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// CheckPhoneHomeBtnOrNotch.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
enum DeviceTypeEnum{
|
||||||
|
case notch
|
||||||
|
case homeButton
|
||||||
|
case notFound
|
||||||
|
}
|
||||||
|
class CheckPhoneHomeBtnOrNotch{
|
||||||
|
|
||||||
|
static let shareInstance = CheckPhoneHomeBtnOrNotch()
|
||||||
|
|
||||||
|
func check() -> DeviceTypeEnum{
|
||||||
|
switch UIDevice().hasNotch{
|
||||||
|
case true:
|
||||||
|
return .notch
|
||||||
|
case false:
|
||||||
|
return .homeButton
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func topConstriant() -> CGFloat{
|
||||||
|
switch CheckPhoneHomeBtnOrNotch.shareInstance.check(){
|
||||||
|
case .notch:
|
||||||
|
return 40
|
||||||
|
case .homeButton:
|
||||||
|
return 15
|
||||||
|
case .notFound:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UIDevice {
|
||||||
|
var hasNotch: Bool {
|
||||||
|
if #available(iOS 13.0, *) {
|
||||||
|
let scenes = UIApplication.shared.connectedScenes
|
||||||
|
let windowScene = scenes.first as? UIWindowScene
|
||||||
|
guard let window = windowScene?.windows.first else { return false }
|
||||||
|
|
||||||
|
return window.safeAreaInsets.top > 20
|
||||||
|
}
|
||||||
|
|
||||||
|
if #available(iOS 11.0, *) {
|
||||||
|
let top = UIApplication.shared.windows[0].safeAreaInsets.top
|
||||||
|
return top > 20
|
||||||
|
} else {
|
||||||
|
// Fallback on earlier versions
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
WOKA/Helpers/Localized/LocalizedString.swift
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// LocalizedString.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension String{
|
||||||
|
func localized(loc: String) -> String{
|
||||||
|
let path = Bundle.main.path(forResource: loc, ofType: "lproj")
|
||||||
|
let bundle = Bundle(path: path!)
|
||||||
|
return NSLocalizedString(self, tableName: nil , bundle: bundle!, value: "", comment: "")
|
||||||
|
}
|
||||||
|
}
|
||||||
47
WOKA/Helpers/ShadowView.swift
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
//
|
||||||
|
// ShadowView.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class ShadowView: UIView {
|
||||||
|
|
||||||
|
@IBInspectable var shadowColor : UIColor?
|
||||||
|
|
||||||
|
@IBInspectable var cornerRadius : CGFloat = 8
|
||||||
|
|
||||||
|
@IBInspectable var shadowOpacity : Float = 0.3
|
||||||
|
|
||||||
|
override var bounds: CGRect {
|
||||||
|
didSet {
|
||||||
|
setupShadow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func setupShadow() {
|
||||||
|
self.layer.cornerRadius = cornerRadius
|
||||||
|
self.layer.shadowOffset = CGSize(width: 0, height: 3)
|
||||||
|
self.layer.shadowColor = (shadowColor != nil) ? shadowColor!.cgColor : UIColor.lightGray.cgColor
|
||||||
|
self.layer.shadowRadius = cornerRadius
|
||||||
|
self.layer.shadowOpacity = shadowOpacity
|
||||||
|
self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 8, height: 8)).cgPath
|
||||||
|
self.layer.shouldRasterize = true
|
||||||
|
self.layer.rasterizationScale = UIScreen.main.scale
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extension UIView {
|
||||||
|
func addShadowAndCorner(radius: CGFloat, shadowColor: UIColor = .black, shadowOpacity: Float = 0.5, shadowOffset: CGSize = CGSize(width: 0, height: 2), shadowRadius: CGFloat = 2) {
|
||||||
|
layer.cornerRadius = radius
|
||||||
|
layer.masksToBounds = false
|
||||||
|
layer.shadowColor = shadowColor.cgColor
|
||||||
|
layer.shadowOpacity = shadowOpacity
|
||||||
|
layer.shadowOffset = shadowOffset
|
||||||
|
layer.shadowRadius = shadowRadius
|
||||||
|
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: radius).cgPath
|
||||||
|
}
|
||||||
|
}
|
||||||
57
WOKA/Helpers/StringSubScript.swift
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
//
|
||||||
|
// StringSubScript.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
The first subscript allows you to access an element at a specific offset in the string.
|
||||||
|
The next two subscripts allow you to get a subsequence using a range (open or closed).
|
||||||
|
The last three subscripts handle partial ranges, providing a subsequence from the start, up to a specified index, or from a specified index to the end.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
extension StringProtocol {
|
||||||
|
subscript(_ offset: Int) -> Element { self[index(startIndex, offsetBy: offset)] }
|
||||||
|
subscript(_ range: Range<Int>) -> SubSequence { prefix(range.lowerBound+range.count).suffix(range.count) }
|
||||||
|
subscript(_ range: ClosedRange<Int>) -> SubSequence { prefix(range.lowerBound+range.count).suffix(range.count) }
|
||||||
|
subscript(_ range: PartialRangeThrough<Int>) -> SubSequence { prefix(range.upperBound.advanced(by: 1)) }
|
||||||
|
subscript(_ range: PartialRangeUpTo<Int>) -> SubSequence { prefix(range.upperBound) }
|
||||||
|
subscript(_ range: PartialRangeFrom<Int>) -> SubSequence { suffix(Swift.max(0, count-range.lowerBound)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
extension LosslessStringConvertible {
|
||||||
|
var string: String { .init(self) }
|
||||||
|
}
|
||||||
|
|
||||||
|
extension BidirectionalCollection {
|
||||||
|
subscript(safe offset: Int) -> Element? {
|
||||||
|
if offset < 0 { return nil }
|
||||||
|
guard !isEmpty, let i = index(startIndex, offsetBy: offset, limitedBy: index(before: endIndex)) else { return nil }
|
||||||
|
return self[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
let test = "Hello USA 🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||||
|
test[safe: 10] // "🇺🇸"
|
||||||
|
test[11] // "!"
|
||||||
|
test[10...] // "🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||||
|
test[10..<12] // "🇺🇸!"
|
||||||
|
test[10...12] // "🇺🇸!!"
|
||||||
|
test[...10] // "Hello USA 🇺🇸"
|
||||||
|
test[..<10] // "Hello USA "
|
||||||
|
test.first // "H"
|
||||||
|
test.last // "!"
|
||||||
|
|
||||||
|
// Subscripting the Substring
|
||||||
|
test[...][...3] // "Hell"
|
||||||
|
|
||||||
|
// Note that they all return a Substring of the original String.
|
||||||
|
// To create a new String from a substring
|
||||||
|
test[10...].string // "🇺🇸!!! Hello Brazil 🇧🇷!!!"
|
||||||
|
*/
|
||||||
36
WOKA/Helpers/UIElements Helper/ApplyGradrient.swift
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// ApplyGradrient.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
45
WOKA/Helpers/UIElements Helper/LocalisedElements.swift
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// LocalisedElements.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class LocalisedElementsLabel: UILabel {
|
||||||
|
|
||||||
|
override init(frame: CGRect) {
|
||||||
|
super.init(frame: frame)
|
||||||
|
setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
super.init(coder: coder)
|
||||||
|
// This will call `awakeFromNib` in your code
|
||||||
|
setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func setup() {
|
||||||
|
self.text = self.text?.localized(loc: K.GVar.localized)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LocalisedElementsButton : UIButton {
|
||||||
|
|
||||||
|
override init(frame: CGRect) {
|
||||||
|
super.init(frame: frame)
|
||||||
|
setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
super.init(coder: coder)
|
||||||
|
// This will call `awakeFromNib` in your code
|
||||||
|
setup()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func setup() {
|
||||||
|
self.setTitle(self.titleLabel?.text?.localized(loc: K.GVar.localized), for: .normal)
|
||||||
|
}
|
||||||
|
}
|
||||||
68
WOKA/Helpers/UIElements Helper/RoundCorner.swift
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
//
|
||||||
|
// RoundCorner.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// MARK: - Define all corner radius elements in this file
|
||||||
|
|
||||||
|
extension UIView{
|
||||||
|
func roundCorner(radius : CGFloat? = nil){
|
||||||
|
self.clipsToBounds = true
|
||||||
|
if let radius{
|
||||||
|
self.layer.cornerRadius = radius
|
||||||
|
}else{
|
||||||
|
self.layer.cornerRadius = self.frame.height / 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Round corner for view all ends
|
||||||
|
|
||||||
|
extension UIView {
|
||||||
|
|
||||||
|
func roundCorners(radius: CGFloat = 10, corners: UIRectCorner = .allCorners) {
|
||||||
|
self.clipsToBounds = true
|
||||||
|
self.layer.cornerRadius = radius
|
||||||
|
if #available(iOS 11.0, *) {
|
||||||
|
var arr: CACornerMask = []
|
||||||
|
|
||||||
|
let allCorners: [UIRectCorner] = [.topLeft, .topRight, .bottomLeft, .bottomRight, .allCorners]
|
||||||
|
|
||||||
|
for corn in allCorners {
|
||||||
|
if(corners.contains(corn)){
|
||||||
|
switch corn {
|
||||||
|
case .topLeft:
|
||||||
|
arr.insert(.layerMinXMinYCorner)
|
||||||
|
case .topRight:
|
||||||
|
arr.insert(.layerMaxXMinYCorner)
|
||||||
|
case .bottomLeft:
|
||||||
|
arr.insert(.layerMinXMaxYCorner)
|
||||||
|
case .bottomRight:
|
||||||
|
arr.insert(.layerMaxXMaxYCorner)
|
||||||
|
case .allCorners:
|
||||||
|
arr.insert(.layerMinXMinYCorner)
|
||||||
|
arr.insert(.layerMaxXMinYCorner)
|
||||||
|
arr.insert(.layerMinXMaxYCorner)
|
||||||
|
arr.insert(.layerMaxXMaxYCorner)
|
||||||
|
default: break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.layer.maskedCorners = arr
|
||||||
|
} else {
|
||||||
|
self.roundCornersBezierPath(corners: corners, radius: radius)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func roundCornersBezierPath(corners: UIRectCorner, radius: CGFloat) {
|
||||||
|
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
|
||||||
|
let mask = CAShapeLayer()
|
||||||
|
mask.path = path.cgPath
|
||||||
|
layer.mask = mask
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
143
WOKA/Helpers/UIElements Helper/TextFieldErrorView.swift
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
//
|
||||||
|
// TextFieldErrorView.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
//private var rightViews = NSMapTable<UITextField, UIView>(keyOptions: NSPointerFunctions.Options.weakMemory, valueOptions: NSPointerFunctions.Options.strongMemory)
|
||||||
|
var errorViews = NSMapTable<UITextField, UIView>(keyOptions: NSPointerFunctions.Options.weakMemory, valueOptions: NSPointerFunctions.Options.strongMemory)
|
||||||
|
|
||||||
|
extension UITextField {
|
||||||
|
// Add/remove error message
|
||||||
|
func setError(_ string: String? = nil, show: Bool = true) {
|
||||||
|
// Remove message
|
||||||
|
guard string != nil else {
|
||||||
|
|
||||||
|
if let errorView = errorViews.object(forKey: self) {
|
||||||
|
errorView.isHidden = true
|
||||||
|
errorViews.removeObject(forKey: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create container
|
||||||
|
let container = UIView()
|
||||||
|
container.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
|
||||||
|
// Create triangle
|
||||||
|
let triagle = TriangleTop()
|
||||||
|
triagle.backgroundColor = .clear
|
||||||
|
triagle.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
container.addSubview(triagle)
|
||||||
|
|
||||||
|
// Create red line
|
||||||
|
let line = UIView()
|
||||||
|
line.backgroundColor = .red
|
||||||
|
line.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
container.addSubview(line)
|
||||||
|
|
||||||
|
// Create message
|
||||||
|
let label = UILabel()
|
||||||
|
label.text = " \(string ?? "") "
|
||||||
|
label.textColor = .white
|
||||||
|
label.numberOfLines = 0
|
||||||
|
label.font = UIFont.systemFont(ofSize: 15)
|
||||||
|
label.backgroundColor = .black
|
||||||
|
label.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 250), for: .horizontal)
|
||||||
|
label.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
container.addSubview(label)
|
||||||
|
|
||||||
|
// Set constraints for triangle
|
||||||
|
triagle.heightAnchor.constraint(equalToConstant: 10).isActive = true
|
||||||
|
triagle.widthAnchor.constraint(equalToConstant: 15).isActive = true
|
||||||
|
triagle.topAnchor.constraint(equalTo: container.topAnchor, constant: -20).isActive = true
|
||||||
|
triagle.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -15).isActive = true
|
||||||
|
|
||||||
|
// Set constraints for line
|
||||||
|
line.heightAnchor.constraint(equalToConstant: 3).isActive = true
|
||||||
|
line.topAnchor.constraint(equalTo: triagle.bottomAnchor, constant: 0).isActive = true
|
||||||
|
line.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
|
||||||
|
line.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: 0).isActive = true
|
||||||
|
|
||||||
|
// Set constraints for label
|
||||||
|
label.topAnchor.constraint(equalTo: line.bottomAnchor, constant: 0).isActive = true
|
||||||
|
label.heightAnchor.constraint(equalToConstant: 30).isActive = true
|
||||||
|
label.bottomAnchor.constraint(equalTo: container.bottomAnchor, constant: 0).isActive = true
|
||||||
|
label.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
|
||||||
|
label.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: 0).isActive = true
|
||||||
|
|
||||||
|
if !show {
|
||||||
|
container.isHidden = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add container to superview
|
||||||
|
if let rootView = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) {
|
||||||
|
rootView.addSubview(container)
|
||||||
|
|
||||||
|
// Set constraints for container
|
||||||
|
container.widthAnchor.constraint(lessThanOrEqualTo: superview!.widthAnchor, multiplier: 1).isActive = true
|
||||||
|
container.trailingAnchor.constraint(equalTo: superview!.trailingAnchor, constant: 0).isActive = true
|
||||||
|
container.topAnchor.constraint(equalTo: superview!.bottomAnchor, constant: 0).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide other error messages
|
||||||
|
let enumerator = errorViews.objectEnumerator()
|
||||||
|
while let view = enumerator!.nextObject() as! UIView? {
|
||||||
|
view.isHidden = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save view with error message
|
||||||
|
errorViews.setObject(container, forKey: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
// // Show error message
|
||||||
|
// @IBAction
|
||||||
|
// func errorAction(_ sender: Any) {
|
||||||
|
// let errorButton = sender as! UIButton
|
||||||
|
// let textField = errorButton.superview as! UITextField
|
||||||
|
//
|
||||||
|
// let errorView = errorViews.object(forKey: textField)
|
||||||
|
// if let errorView = errorView {
|
||||||
|
// errorView.isHidden.toggle()
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// let enumerator = errorViews.objectEnumerator()
|
||||||
|
// while let view = enumerator!.nextObject() as! UIView? {
|
||||||
|
// if view != errorView {
|
||||||
|
// view.isHidden = true
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Don't hide keyboard after click by icon
|
||||||
|
// // UIViewController.isCatchTappedAround = false
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
class TriangleTop: UIView {
|
||||||
|
override init(frame: CGRect) {
|
||||||
|
super.init(frame: frame)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
super.init(coder: aDecoder)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func draw(_ rect: CGRect) {
|
||||||
|
guard let context = UIGraphicsGetCurrentContext() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
context.beginPath()
|
||||||
|
context.move(to: CGPoint(x: (rect.maxX / 2.0), y: rect.minY))
|
||||||
|
context.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
|
||||||
|
context.addLine(to: CGPoint(x: (rect.minX / 2.0), y: rect.maxY))
|
||||||
|
context.closePath()
|
||||||
|
|
||||||
|
context.setFillColor(UIColor.red.cgColor)
|
||||||
|
context.fillPath()
|
||||||
|
}
|
||||||
|
}
|
||||||
51
WOKA/Helpers/UIElements Helper/TextFieldImage.swift
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// TextFieldImage.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UITextField {
|
||||||
|
|
||||||
|
//MARK:- Set Image on the right of text fields
|
||||||
|
|
||||||
|
func setupRightImage(imageName:String,tintColor : UIColor?){
|
||||||
|
let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
|
||||||
|
imageView.image = UIImage(named: imageName)
|
||||||
|
let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
|
||||||
|
imageContainerView.addSubview(imageView)
|
||||||
|
rightView = imageContainerView
|
||||||
|
rightViewMode = .always
|
||||||
|
self.tintColor = tintColor ?? .lightGray
|
||||||
|
}
|
||||||
|
|
||||||
|
//MARK:- Set Image on left of text fields
|
||||||
|
|
||||||
|
func setupLeftImage(imageName:String,tintColor : UIColor?){
|
||||||
|
let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
|
||||||
|
imageView.image = UIImage(named: imageName)
|
||||||
|
let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
|
||||||
|
imageContainerView.addSubview(imageView)
|
||||||
|
leftView = imageContainerView
|
||||||
|
leftViewMode = .always
|
||||||
|
self.tintColor = tintColor ?? .lightGray
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extension UITextField {
|
||||||
|
func addRightButton(title: String?, tintColor : UIColor, btnImage : UIImage?, target: Any?, action: Selector) {
|
||||||
|
// Create a button
|
||||||
|
let button = UIButton(type: .system)
|
||||||
|
button.setTitle(title, for: .normal)
|
||||||
|
button.addTarget(target, action: action, for: .touchUpInside)
|
||||||
|
button.setImage(btnImage, for: .normal)
|
||||||
|
button.tintColor = tintColor
|
||||||
|
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 10)
|
||||||
|
// Set the button as the right view of the text field
|
||||||
|
self.rightView = button
|
||||||
|
self.rightViewMode = .always
|
||||||
|
}
|
||||||
|
}
|
||||||
35
WOKA/Helpers/UIElements Helper/TextFieldPadding.swift
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// TextFieldPadding.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
@IBDesignable
|
||||||
|
extension UITextField {
|
||||||
|
|
||||||
|
@IBInspectable var paddingLeftCustom: CGFloat {
|
||||||
|
get {
|
||||||
|
return leftView!.frame.size.width
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
|
||||||
|
leftView = paddingView
|
||||||
|
leftViewMode = .always
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBInspectable var paddingRightCustom: CGFloat {
|
||||||
|
get {
|
||||||
|
return rightView!.frame.size.width
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
|
||||||
|
rightView = paddingView
|
||||||
|
rightViewMode = .always
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
42
WOKA/Helpers/UIElements Helper/TextFieldShadow.swift
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// TextFieldShadow.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class TextFieldShadow: UITextField {
|
||||||
|
|
||||||
|
lazy var innerShadow: CALayer = {
|
||||||
|
let innerShadow = CALayer()
|
||||||
|
layer.addSublayer(innerShadow)
|
||||||
|
return innerShadow
|
||||||
|
}()
|
||||||
|
|
||||||
|
override func layoutSubviews() {
|
||||||
|
super.layoutSubviews()
|
||||||
|
applyDesign()
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyDesign() {
|
||||||
|
innerShadow.frame = bounds
|
||||||
|
|
||||||
|
// Shadow path (1pt ring around bounds)
|
||||||
|
let radius = self.frame.size.height/2
|
||||||
|
let path = UIBezierPath(roundedRect: innerShadow.bounds.insetBy(dx: -1, dy:-1), cornerRadius:radius)
|
||||||
|
let cutout = UIBezierPath(roundedRect: innerShadow.bounds, cornerRadius:radius).reversing()
|
||||||
|
|
||||||
|
|
||||||
|
path.append(cutout)
|
||||||
|
innerShadow.shadowPath = path.cgPath
|
||||||
|
innerShadow.masksToBounds = true
|
||||||
|
// Shadow properties
|
||||||
|
innerShadow.shadowColor = UIColor.black.cgColor
|
||||||
|
innerShadow.shadowOffset = CGSize(width: 0, height: 1.2)
|
||||||
|
innerShadow.shadowOpacity = 0.8
|
||||||
|
innerShadow.shadowRadius = 2
|
||||||
|
innerShadow.cornerRadius = self.frame.size.height/2
|
||||||
|
}
|
||||||
|
}
|
||||||
59
WOKA/Helpers/Validations/EmailValidation.swift
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
// MARK: - This will validate the Email ID, validation result can be modified from the enum
|
||||||
|
|
||||||
|
struct EmailValidation {
|
||||||
|
let emailString: String
|
||||||
|
|
||||||
|
init(email: String) {
|
||||||
|
self.emailString = email
|
||||||
|
}
|
||||||
|
|
||||||
|
private func validate() -> Bool {
|
||||||
|
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
|
||||||
|
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
|
||||||
|
return emailPred.evaluate(with: emailString)
|
||||||
|
}
|
||||||
|
|
||||||
|
func validate() -> EmailValidatorResult {
|
||||||
|
if emailString == "" {
|
||||||
|
return .isEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
if !emailString.contains("@") {
|
||||||
|
return .missingAtTheRateSymbol
|
||||||
|
}
|
||||||
|
|
||||||
|
// if !emailDomain.allCases.contains(where: { emailString.contains($0.rawValue) }) {
|
||||||
|
// return .missingDotCom
|
||||||
|
// }
|
||||||
|
|
||||||
|
if !validate() {
|
||||||
|
return .badlyFormatted
|
||||||
|
}
|
||||||
|
|
||||||
|
return .isCorrect
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EmailValidatorResult: String {
|
||||||
|
case missingAtTheRateSymbol = "An Email Address must contain a single '@'"
|
||||||
|
case isEmpty = "Please enter your email"
|
||||||
|
case isCorrect = "Email address is in correct format"
|
||||||
|
case missingDotCom = "Email Address does not contain the domain portion (e.g. '.com')"
|
||||||
|
case badlyFormatted = "Please enter a valid Email Address"
|
||||||
|
}
|
||||||
|
|
||||||
|
enum emailDomain : String,CaseIterable{
|
||||||
|
case com = ".com"
|
||||||
|
case net = ".net"
|
||||||
|
case coin = ".co.in"
|
||||||
|
case couk = ".co.uk"
|
||||||
|
}
|
||||||
79
WOKA/Helpers/Validations/StringValidations.swift
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
//
|
||||||
|
// StringValidations.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 29/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// MARK: - Validation for numbers , name , name & number
|
||||||
|
|
||||||
|
extension String{
|
||||||
|
|
||||||
|
func nameCharacterOnly()->Bool{
|
||||||
|
let allowedCharacters = CharacterSet(charactersIn:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ").inverted
|
||||||
|
let components = string.components(separatedBy: allowedCharacters)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func onlyNumber()->Bool{
|
||||||
|
let allowedNumber = CharacterSet(charactersIn:"0123456789").inverted
|
||||||
|
let components = string.components(separatedBy: allowedNumber)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func onlyPhoneNumber()->Bool{
|
||||||
|
let allowedNumber = CharacterSet(charactersIn:"+0123456789").inverted
|
||||||
|
let components = string.components(separatedBy: allowedNumber)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func onlyNumberAndDecimal()->Bool{
|
||||||
|
let allowedNumber = CharacterSet(charactersIn:"0123456789.").inverted
|
||||||
|
let components = string.components(separatedBy: allowedNumber)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func numberAndCharacter()->Bool{
|
||||||
|
let allowedCharacters = CharacterSet(charactersIn:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ").inverted
|
||||||
|
let components = string.components(separatedBy: allowedCharacters)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func numberAndCharacterAndSpecialChar()->Bool{
|
||||||
|
let allowedCharacters = CharacterSet(charactersIn:"!@#$%^&*()+=-[]{};:'\"|<>,.?/~`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ").inverted
|
||||||
|
let components = string.components(separatedBy: allowedCharacters)
|
||||||
|
let filtered = components.joined(separator: "")
|
||||||
|
if string != filtered {
|
||||||
|
return false
|
||||||
|
}else{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
WOKA/Info.plist
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>UIUserInterfaceStyle</key>
|
||||||
|
<string>Light</string>
|
||||||
|
<key>UIApplicationSceneManifest</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIApplicationSupportsMultipleScenes</key>
|
||||||
|
<false/>
|
||||||
|
<key>UISceneConfigurations</key>
|
||||||
|
<dict>
|
||||||
|
<key>UIWindowSceneSessionRoleApplication</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>UISceneConfigurationName</key>
|
||||||
|
<string>Default Configuration</string>
|
||||||
|
<key>UISceneDelegateClassName</key>
|
||||||
|
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||||||
|
<key>UISceneStoryboardFile</key>
|
||||||
|
<string>Main</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>UIAppFonts</key>
|
||||||
|
<array>
|
||||||
|
<string>Exo2-Bold.ttf</string>
|
||||||
|
<string>Exo2-ExtraBold.ttf</string>
|
||||||
|
<string>Exo2-Medium.ttf</string>
|
||||||
|
<string>Exo2-Regular.ttf</string>
|
||||||
|
<string>Exo2-SemiBold.ttf</string>
|
||||||
|
<string>Exo2-Thin.ttf</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
13
WOKA/Localized Module/en.lproj/Localizable.strings
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
Localizable.strings
|
||||||
|
WOKA
|
||||||
|
|
||||||
|
Created by MacBook Pro on 25/04/24.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "हिंदी"; ObjectID = "SYp-e1-w6s"; */
|
||||||
|
"SYp-e1-w6s.normalTitle" = "हिंदी";
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "English"; ObjectID = "XdB-NB-osA"; */
|
||||||
|
"XdB-NB-osA.normalTitle" = "English";
|
||||||
77
WOKA/Localized Module/hi.lproj/Localizable.strings
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
|
||||||
|
"Hello" = "नमस्ते";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Carousel Text
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Slide 1
|
||||||
|
"Watch, Listen & Play" = "देखो, सुनो और खेलो";
|
||||||
|
"LIVE TV, VIDEOS, GAMES, AND AUDIO BOOKS" = "लाइव टीवी, वीडियो गेम और ऑडियो पुस्तकें";
|
||||||
|
|
||||||
|
// Slide 2
|
||||||
|
"Sing-Along and Shop" = "मिलकर गायें और खरेदी करें";
|
||||||
|
|
||||||
|
// Slide 3
|
||||||
|
"Lets all go to WOKALAND" = "चलो चलें WOKALAND";
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
OnBoard Screen
|
||||||
|
*/
|
||||||
|
"CREATE YOUR ACCOUNT" = "अपना नि:शुल्क खाता बनाएं";
|
||||||
|
"LOGIN" = "लॉग इन करें" ;
|
||||||
|
"Continue as a Guest" = "अतिथि के रूप में जारी रखें";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Age Check Screen
|
||||||
|
*/
|
||||||
|
|
||||||
|
"We Value Your Privacy" = "हम आपकी गोपनीयता को महत्व देते हैं";
|
||||||
|
"YEARS" = "साल";
|
||||||
|
"I AM" = "मैं हूँ";
|
||||||
|
"UNDER" = "कम १६";
|
||||||
|
"ABOVE" = "अधिक १६";
|
||||||
|
"We will need your parent’s email so they can verify and agree to create an account." = "हमें आपके माता-पिता के ईमेल की आवश्यकता होगी ताकि वे सत्यापित कर सकें और खाता बनाने के लिए सहमत हो सकें।";
|
||||||
|
"Above 16 users will be registered as a guardian with additional content." = "१६ से अधिक उपयोगकर्ताओं को अतिरिक्त सामग्री के साथ अभिभावक के रूप में पंजीकृत किया जाएगा।";
|
||||||
|
"16 IS THE MAGIC NUMBER" = "१६ जादुई संख्या है";
|
||||||
|
"16" = "१६";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Enter Email VC
|
||||||
|
*/
|
||||||
|
|
||||||
|
"Enter your email" = "अपना ईमेल दर्ज करें";
|
||||||
|
"Enter your parent's email" = "अपने माता-पिता का ईमेल दर्ज करें";
|
||||||
|
"Let’s be Safe!" = "आइए सुरक्षित रहें!";
|
||||||
|
"Let’s Start Here" = "आइए यहां से शुरू करें";
|
||||||
|
"CAN WE HAVE YOUR PARENT’S EMAIL?" = "क्या हमें आपके माता-पिता का ईमेल मिल सकता है?";
|
||||||
|
"CAN WE HAVE YOUR EMAIL?" = "क्या हमें आपका ईमेल मिल सकता है?";
|
||||||
|
"We will send a verification code to their email" = "हम उनके ईमेल पर एक सत्यापन कोड भेजेंगे";
|
||||||
|
"Next" = "अगला";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
OTP VC
|
||||||
|
*/
|
||||||
|
"Request them for the verfication code to activate your account" = "अपने खाते को सक्रिय करने के लिए उनसे सत्यापन कोड के लिए अनुरोध करें";
|
||||||
|
"Please Get the Code Sent to Your Parent’s Email" = "कृपया कोड अपने माता-पिता के ईमेल पर भेजें";
|
||||||
|
"Please Get the OTP Sent to Your Email" = "कृपया अपने ईमेल पर भेजा गया ओटीपी प्राप्त करें";
|
||||||
|
"PLEASE ENTER THE CODE" = "कृपया कोड दर्ज करें";
|
||||||
|
"PLEASE ENTER THE OTP" = "कृपया ओटीपी दर्ज करें";
|
||||||
|
"Don’t forget to check your JUNK/SPAM folder" = "अपना जंक/स्पैम फ़ोल्डर जांचना न भूलें";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
UserDetails Registeration VC
|
||||||
|
*/
|
||||||
|
"WHAT’S YOUR NAME?" = "तुम्हारा नाम क्या है?";
|
||||||
|
"SELECT USERNAME" = "उपयोक्तानाम चुनें";
|
||||||
|
"CREATE YOUR PASSWORD" = "अपना पासवर्ड बनाएं";
|
||||||
|
"Great! Now Let’s Create Your WOKAccount" = "महान! आइए अब अपना WOKA अकाउंट बनाएं";
|
||||||
|
"Shh!! Don’t share your password with anyone." = "शश!! अपना पासवर्ड किसी के साथ साझा न करें.";
|
||||||
|
"Enter a username" = "एक उपयोगकर्ता नाम दर्ज करें";
|
||||||
|
"Enter your name" = "आपका नाम क्या है?";
|
||||||
|
"Enter your password" = "अपना पासवर्ड भरें";
|
||||||
45
WOKA/Main/AppDelegate.swift
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import Lottie
|
||||||
|
import IQKeyboardManagerSwift
|
||||||
|
|
||||||
|
@main
|
||||||
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
|
||||||
|
// enabling the IQKeyboard manager instance
|
||||||
|
IQKeyboardManager.shared.enable = true
|
||||||
|
IQKeyboardManager.shared.resignOnTouchOutside = true
|
||||||
|
// IQKeyboardManager.shared.enableAutoToolbar = false
|
||||||
|
|
||||||
|
// IQKeyboardManager.shared.layoutIfNeededOnUpdate = true
|
||||||
|
|
||||||
|
//Lottie Config to handle rendering
|
||||||
|
LottieConfiguration.shared.renderingEngine = .mainThread
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: UISceneSession Lifecycle
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
||||||
|
// Called when a new scene session is being created.
|
||||||
|
// Use this method to select a configuration to create the new scene with.
|
||||||
|
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
||||||
|
}
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
||||||
|
// Called when the user discards a scene session.
|
||||||
|
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
||||||
|
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
51
WOKA/Main/AuthFunc.swift
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// AuthFunc.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
|
class AuthFunc{
|
||||||
|
|
||||||
|
/**
|
||||||
|
This is not for external use!
|
||||||
|
This should only be used for login, registration, Auth Process process & userData Extraction.
|
||||||
|
*/
|
||||||
|
var player: AVQueuePlayer?
|
||||||
|
var playerLooper: AVPlayerLooper?
|
||||||
|
var userType = UserType.adult
|
||||||
|
|
||||||
|
static let shareInstance = AuthFunc()
|
||||||
|
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enum UserType {
|
||||||
|
case adult
|
||||||
|
case kid
|
||||||
|
}
|
||||||
52
WOKA/Main/SceneDelegate.swift
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// SceneDelegate.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
|
|
||||||
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|
||||||
|
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
||||||
|
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
|
||||||
|
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
|
||||||
|
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
|
||||||
|
guard let _ = (scene as? UIWindowScene) else { return }
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidDisconnect(_ scene: UIScene) {
|
||||||
|
// Called as the scene is being released by the system.
|
||||||
|
// This occurs shortly after the scene enters the background, or when its session is discarded.
|
||||||
|
// Release any resources associated with this scene that can be re-created the next time the scene connects.
|
||||||
|
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||||
|
// Called when the scene has moved from an inactive state to an active state.
|
||||||
|
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneWillResignActive(_ scene: UIScene) {
|
||||||
|
// Called when the scene will move from an active state to an inactive state.
|
||||||
|
// This may occur due to temporary interruptions (ex. an incoming phone call).
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneWillEnterForeground(_ scene: UIScene) {
|
||||||
|
// Called as the scene transitions from the background to the foreground.
|
||||||
|
// Use this method to undo the changes made on entering the background.
|
||||||
|
}
|
||||||
|
|
||||||
|
func sceneDidEnterBackground(_ scene: UIScene) {
|
||||||
|
// Called as the scene transitions from the foreground to the background.
|
||||||
|
// Use this method to save data, release shared resources, and store enough scene-specific state information
|
||||||
|
// to restore the scene back to its current state.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
496
WOKA/OnBoarding Module/Base.lproj/Main.storyboard
Normal file
@@ -0,0 +1,496 @@
|
|||||||
|
<?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="v6B-41-NJx">
|
||||||
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="Exo2-Bold.ttf">
|
||||||
|
<string>Exo2-Bold</string>
|
||||||
|
</array>
|
||||||
|
<array key="Exo2-Regular.ttf">
|
||||||
|
<string>Exo2-Regular</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
|
<scenes>
|
||||||
|
<!--SplashVC-->
|
||||||
|
<scene sceneID="tne-QT-ifu">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="SplashVC" id="BYZ-38-t0r" customClass="SplashVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="OYq-ie-PCX">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="0T1-bR-Cvy">
|
||||||
|
<rect key="frame" x="137" y="429" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="5Om-xJ-yBC"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="0T1-bR-Cvy" secondAttribute="height" multiplier="8:3" id="IPk-eZ-y1g"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<stackView hidden="YES" opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="KHl-9W-vAe">
|
||||||
|
<rect key="frame" x="30" y="561.5" width="354" height="60"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XdB-NB-osA">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="162" height="60"/>
|
||||||
|
<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="English"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="languageBtnTapped:" destination="BYZ-38-t0r" eventType="touchUpInside" id="6XC-m2-ULl"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SYp-e1-w6s">
|
||||||
|
<rect key="frame" x="192" y="0.0" width="162" height="60"/>
|
||||||
|
<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="हिंदी"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="languageBtnTapped:" destination="BYZ-38-t0r" eventType="touchUpInside" id="CMC-XA-zLs"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="60" id="uib-PY-aKX"/>
|
||||||
|
</constraints>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="KHl-9W-vAe" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="30" id="E1n-Eh-P1N"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="OYq-ie-PCX" secondAttribute="bottom" id="JoJ-CY-PKV"/>
|
||||||
|
<constraint firstItem="OYq-ie-PCX" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="QIp-RX-W6O"/>
|
||||||
|
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="KHl-9W-vAe" secondAttribute="trailing" constant="30" id="WgR-cO-AqS"/>
|
||||||
|
<constraint firstItem="0T1-bR-Cvy" firstAttribute="centerX" secondItem="OYq-ie-PCX" secondAttribute="centerX" id="crp-Vn-eE2"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="OYq-ie-PCX" secondAttribute="trailing" id="eul-m2-arb"/>
|
||||||
|
<constraint firstItem="0T1-bR-Cvy" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="fdB-2S-YYe"/>
|
||||||
|
<constraint firstItem="KHl-9W-vAe" firstAttribute="top" secondItem="0T1-bR-Cvy" secondAttribute="bottom" constant="80" id="ld4-Um-qic"/>
|
||||||
|
<constraint firstItem="OYq-ie-PCX" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="yVI-ZY-646"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="cMP-Th-2kL"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="englishBtn" destination="XdB-NB-osA" id="eiP-q9-9TH"/>
|
||||||
|
<outlet property="hindiBtn" destination="SYp-e1-w6s" id="mgg-al-7J8"/>
|
||||||
|
<outlet property="languageBtnStack" destination="KHl-9W-vAe" id="ssW-dX-fxk"/>
|
||||||
|
<outlet property="wokaLogo" destination="0T1-bR-Cvy" id="d6a-va-BqC"/>
|
||||||
|
<outlet property="wokaOriginY" destination="fdB-2S-YYe" id="g0Q-Zd-FKu"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1049.2753623188407" y="3.3482142857142856"/>
|
||||||
|
</scene>
|
||||||
|
<!--On BoardVC-->
|
||||||
|
<scene sceneID="mNL-rE-kz5">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="OnBoardVC" id="Ugf-xS-kWn" customClass="OnBoardVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="ask-ar-Fuj">
|
||||||
|
<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="NxP-bj-mtL">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
</view>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="5Wa-iZ-sl2">
|
||||||
|
<rect key="frame" x="137" y="400" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="5Wa-iZ-sl2" secondAttribute="height" multiplier="8:3" id="rbO-nC-nTq"/>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="sS5-02-nUm"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0dF-BT-pk2">
|
||||||
|
<rect key="frame" x="0.0" y="48" width="414" height="814"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" alpha="0.0" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="E4U-36-FaU">
|
||||||
|
<rect key="frame" x="0.0" y="80" width="414" height="656"/>
|
||||||
|
<subviews>
|
||||||
|
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="zAH-Rg-6R9">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="400"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="64p-RZ-jkG">
|
||||||
|
<size key="itemSize" width="128" height="128"/>
|
||||||
|
<size key="headerReferenceSize" width="0.0" height="0.0"/>
|
||||||
|
<size key="footerReferenceSize" width="0.0" height="0.0"/>
|
||||||
|
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
|
</collectionViewFlowLayout>
|
||||||
|
<cells/>
|
||||||
|
</collectionView>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YZj-8P-5H1">
|
||||||
|
<rect key="frame" x="0.0" y="400" width="414" height="5"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="5" id="iKl-ax-jPr"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<pageControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="bN3-e7-4Gz">
|
||||||
|
<rect key="frame" x="0.0" y="405" width="414" height="26"/>
|
||||||
|
<color key="pageIndicatorTintColor" red="0.23137254901960785" green="0.10196078431372549" blue="0.63921568627450975" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="currentPageIndicatorTintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pageControl:" destination="Ugf-xS-kWn" eventType="valueChanged" id="oG3-n5-Vf5"/>
|
||||||
|
</connections>
|
||||||
|
</pageControl>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="m5z-1C-wNG">
|
||||||
|
<rect key="frame" x="0.0" y="431" width="414" height="30"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="30" id="Z9c-NE-w9W"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="4lL-AO-KqG">
|
||||||
|
<rect key="frame" x="0.0" y="461" width="414" height="195"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lyg-OD-j2H">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="394" height="58.5"/>
|
||||||
|
<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="CREATE YOUR ACCOUNT">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="createAccountBtnTapped:" destination="Ugf-xS-kWn" eventType="touchUpInside" id="WG3-4I-wNh"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7ID-Rn-iaD">
|
||||||
|
<rect key="frame" x="10" y="68.5" width="394" height="58"/>
|
||||||
|
<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="LOGIN">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="loginBtnTapped:" destination="Ugf-xS-kWn" eventType="touchUpInside" id="i8y-Xy-4rT"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tY2-cn-nfS">
|
||||||
|
<rect key="frame" x="10" y="136.5" width="394" height="58.5"/>
|
||||||
|
<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="Continue as a Guest">
|
||||||
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="guestLoginBtnTapped:" destination="Ugf-xS-kWn" eventType="touchUpInside" id="jqT-lw-QqR"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="195" id="W8g-qy-0dn"/>
|
||||||
|
</constraints>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="E4U-36-FaU" firstAttribute="top" secondItem="0dF-BT-pk2" secondAttribute="top" constant="80" id="KIP-H3-Hs0"/>
|
||||||
|
<constraint firstItem="P5Y-eT-Uwh" firstAttribute="bottom" secondItem="E4U-36-FaU" secondAttribute="bottom" id="fs6-8i-dXe"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="E4U-36-FaU" secondAttribute="trailing" id="nWO-jM-P6m"/>
|
||||||
|
<constraint firstItem="E4U-36-FaU" firstAttribute="leading" secondItem="0dF-BT-pk2" secondAttribute="leading" id="nX3-LJ-ibI"/>
|
||||||
|
<constraint firstItem="JUd-j4-PaA" firstAttribute="trailing" secondItem="E4U-36-FaU" secondAttribute="trailing" id="nuQ-Py-o4b"/>
|
||||||
|
</constraints>
|
||||||
|
<viewLayoutGuide key="contentLayoutGuide" id="P5Y-eT-Uwh"/>
|
||||||
|
<viewLayoutGuide key="frameLayoutGuide" id="JUd-j4-PaA"/>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="1nB-nf-7LU"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="5Wa-iZ-sl2" firstAttribute="top" secondItem="ask-ar-Fuj" secondAttribute="top" constant="400" id="46G-h9-1YN"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="NxP-bj-mtL" secondAttribute="bottom" id="9CY-bD-WEh"/>
|
||||||
|
<constraint firstItem="1nB-nf-7LU" firstAttribute="trailing" secondItem="NxP-bj-mtL" secondAttribute="trailing" id="9qY-HC-O2N"/>
|
||||||
|
<constraint firstItem="0dF-BT-pk2" firstAttribute="top" secondItem="1nB-nf-7LU" secondAttribute="top" id="Fqw-ZB-B7A"/>
|
||||||
|
<constraint firstItem="NxP-bj-mtL" firstAttribute="leading" secondItem="1nB-nf-7LU" secondAttribute="leading" id="Gck-f5-H5t"/>
|
||||||
|
<constraint firstItem="NxP-bj-mtL" firstAttribute="top" secondItem="ask-ar-Fuj" secondAttribute="top" id="KMM-zF-m2B"/>
|
||||||
|
<constraint firstItem="0dF-BT-pk2" firstAttribute="leading" secondItem="1nB-nf-7LU" secondAttribute="leading" id="eVl-AG-pJ2"/>
|
||||||
|
<constraint firstItem="0dF-BT-pk2" firstAttribute="bottom" secondItem="1nB-nf-7LU" secondAttribute="bottom" id="osN-Dx-cDv"/>
|
||||||
|
<constraint firstItem="5Wa-iZ-sl2" firstAttribute="centerX" secondItem="1nB-nf-7LU" secondAttribute="centerX" id="sKy-na-bsK"/>
|
||||||
|
<constraint firstItem="0dF-BT-pk2" firstAttribute="trailing" secondItem="1nB-nf-7LU" secondAttribute="trailing" id="xaS-L7-wig"/>
|
||||||
|
<constraint firstItem="zAH-Rg-6R9" firstAttribute="height" secondItem="ask-ar-Fuj" secondAttribute="height" multiplier="0.446429" id="zkT-FI-0NG"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="carouselCV" destination="zAH-Rg-6R9" id="naT-8B-eAg"/>
|
||||||
|
<outlet property="createAccountBtn" destination="lyg-OD-j2H" id="quB-jN-7aG"/>
|
||||||
|
<outlet property="loginAsGuestBtn" destination="tY2-cn-nfS" id="q2p-25-Gm8"/>
|
||||||
|
<outlet property="loginBtn" destination="7ID-Rn-iaD" id="k07-rK-dmB"/>
|
||||||
|
<outlet property="mainStack" destination="E4U-36-FaU" id="IvT-An-aYO"/>
|
||||||
|
<outlet property="pageControl" destination="bN3-e7-4Gz" id="gxK-E1-5V4"/>
|
||||||
|
<outlet property="viewLottie" destination="NxP-bj-mtL" id="aST-9j-7Ol"/>
|
||||||
|
<outlet property="wokaLogoTopConstriant" destination="46G-h9-1YN" id="LLT-ks-jqh"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="aFn-ay-7SU" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1881.1594202898552" y="2.6785714285714284"/>
|
||||||
|
</scene>
|
||||||
|
<!--Navigation Controller-->
|
||||||
|
<scene sceneID="lM2-wG-a76">
|
||||||
|
<objects>
|
||||||
|
<navigationController automaticallyAdjustsScrollViewInsets="NO" navigationBarHidden="YES" id="v6B-41-NJx" sceneMemberID="viewController">
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="Odo-w6-zNL">
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</navigationBar>
|
||||||
|
<nil name="viewControllers"/>
|
||||||
|
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="tiS-09-25i">
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</toolbar>
|
||||||
|
<connections>
|
||||||
|
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="8WJ-90-RQ3"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="hqA-ar-oSc" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="139.13043478260872" y="3.3482142857142856"/>
|
||||||
|
</scene>
|
||||||
|
<!--Select AgeVC-->
|
||||||
|
<scene sceneID="aL7-my-uTs">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="SelectAgeVC" id="5cf-Ca-pko" customClass="SelectAgeVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="qMS-vC-b1G">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="GN2-ta-IyD">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
</imageView>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="3qB-gN-hV4">
|
||||||
|
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" constant="140" id="4Ox-eC-MEA"/>
|
||||||
|
<constraint firstAttribute="width" secondItem="3qB-gN-hV4" secondAttribute="height" multiplier="8:3" id="nyn-T8-ryQ"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QU1-fM-pg9">
|
||||||
|
<rect key="frame" x="0.0" y="102.5" width="414" height="759.5"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="45" translatesAutoresizingMaskIntoConstraints="NO" id="AbT-1b-YxT">
|
||||||
|
<rect key="frame" x="0.0" y="45" width="414" height="511"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We Value Your Privacy" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kAc-XC-R0J">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="394" height="31.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="26"/>
|
||||||
|
<color key="textColor" red="0.035294117647058823" green="0.0" blue="0.36470588235294116" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eC7-Nz-BfB">
|
||||||
|
<rect key="frame" x="10" y="76.5" width="394" height="0.0"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" id="McN-qk-JmM"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="IvC-MQ-aot">
|
||||||
|
<rect key="frame" x="10" y="121.5" width="394" height="157.5"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="16 IS THE MAGIC NUMBER" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z1g-nr-hDh">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
|
<color key="textColor" red="0.035294117647058823" green="0.0" blue="0.36470588235294116" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jxw-Lm-Uev">
|
||||||
|
<rect key="frame" x="0.0" y="29.5" width="394" height="128"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="16Years" translatesAutoresizingMaskIntoConstraints="NO" id="ILs-9m-HBf">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="128"/>
|
||||||
|
</imageView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="hGX-Rs-8Ei">
|
||||||
|
<rect key="frame" x="176.5" y="28" width="41" height="62.5"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="16" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q5x-RL-o9O">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="41" height="48"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="40"/>
|
||||||
|
<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="YEARS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5xD-nv-Vqh">
|
||||||
|
<rect key="frame" x="0.0" y="48" width="41" height="14.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="12"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="ILs-9m-HBf" secondAttribute="bottom" id="71d-Ky-PHd"/>
|
||||||
|
<constraint firstItem="hGX-Rs-8Ei" firstAttribute="centerY" secondItem="Jxw-Lm-Uev" secondAttribute="centerY" constant="-5" id="8JS-WH-CdL"/>
|
||||||
|
<constraint firstItem="hGX-Rs-8Ei" firstAttribute="centerX" secondItem="Jxw-Lm-Uev" secondAttribute="centerX" id="O20-MQ-bDK"/>
|
||||||
|
<constraint firstItem="ILs-9m-HBf" firstAttribute="top" secondItem="Jxw-Lm-Uev" secondAttribute="top" id="bNJ-JX-6ia"/>
|
||||||
|
<constraint firstItem="ILs-9m-HBf" firstAttribute="leading" secondItem="Jxw-Lm-Uev" secondAttribute="leading" id="dZa-qM-jxc"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="ILs-9m-HBf" secondAttribute="trailing" id="xxG-UL-qwc"/>
|
||||||
|
<constraint firstAttribute="height" constant="128" id="yWn-ej-MSY"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="4MV-0i-bHM">
|
||||||
|
<rect key="frame" x="10" y="324" width="394" height="187"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="40" translatesAutoresizingMaskIntoConstraints="NO" id="6LR-pm-DQz">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="394" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<view alpha="0.69999999999999996" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zRB-HI-qyw">
|
||||||
|
<rect key="frame" x="15" y="0.0" width="162" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="PHl-9L-rHV">
|
||||||
|
<rect key="frame" x="41" y="23.5" width="80" height="53.5"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="I AM" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nDM-Lp-P02">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="80" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
|
<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="UNDER" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BhH-nh-RaQ">
|
||||||
|
<rect key="frame" x="0.0" y="24.5" width="80" height="29"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="24"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" red="0.035294117647058823" green="0.0" blue="0.36470588235294116" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="PHl-9L-rHV" firstAttribute="centerY" secondItem="zRB-HI-qyw" secondAttribute="centerY" id="29o-j4-anr"/>
|
||||||
|
<constraint firstItem="PHl-9L-rHV" firstAttribute="centerX" secondItem="zRB-HI-qyw" secondAttribute="centerX" id="Vr4-6F-jbw"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<view alpha="0.69999999999999996" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3nX-lb-ERZ">
|
||||||
|
<rect key="frame" x="217" y="0.0" width="162" height="100"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="vJO-O8-VZ3">
|
||||||
|
<rect key="frame" x="42.5" y="23.5" width="77" height="53.5"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="I AM" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lap-hA-rD3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="77" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
|
||||||
|
<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="ABOVE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VUN-Ep-Tia">
|
||||||
|
<rect key="frame" x="0.0" y="24.5" width="77" height="29"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="24"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="vJO-O8-VZ3" firstAttribute="centerX" secondItem="3nX-lb-ERZ" secondAttribute="centerX" id="E7w-5N-R93"/>
|
||||||
|
<constraint firstItem="vJO-O8-VZ3" firstAttribute="centerY" secondItem="3nX-lb-ERZ" secondAttribute="centerY" id="xaL-jZ-9dz"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="100" id="DB9-mi-JDq"/>
|
||||||
|
</constraints>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="15" bottom="0.0" right="15"/>
|
||||||
|
</stackView>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="Hwe-9h-x3Y">
|
||||||
|
<rect key="frame" x="0.0" y="115" width="394" height="72"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will need your parent’s email so they can verify and agree to create an account." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VuZ-1Z-b39">
|
||||||
|
<rect key="frame" x="10" y="0.0" width="169.5" height="72"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="15"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Above 16 users will be registered as a guardian with additional content." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wSp-wJ-fpO">
|
||||||
|
<rect key="frame" x="214.5" y="0.0" width="169.5" height="72"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="15"/>
|
||||||
|
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="mxm-o6-oh0" firstAttribute="trailing" secondItem="AbT-1b-YxT" secondAttribute="trailing" id="CuG-pg-wHl"/>
|
||||||
|
<constraint firstItem="3wp-V5-cWJ" firstAttribute="bottom" secondItem="AbT-1b-YxT" secondAttribute="bottom" id="V0c-QN-jJE"/>
|
||||||
|
<constraint firstItem="AbT-1b-YxT" firstAttribute="top" secondItem="QU1-fM-pg9" secondAttribute="top" constant="45" id="Zju-oR-ffR"/>
|
||||||
|
<constraint firstItem="AbT-1b-YxT" firstAttribute="width" secondItem="3wp-V5-cWJ" secondAttribute="width" id="dDN-wM-C3y"/>
|
||||||
|
<constraint firstItem="AbT-1b-YxT" firstAttribute="leading" secondItem="3wp-V5-cWJ" secondAttribute="leading" id="zY6-H9-bm1"/>
|
||||||
|
</constraints>
|
||||||
|
<viewLayoutGuide key="contentLayoutGuide" id="3wp-V5-cWJ"/>
|
||||||
|
<viewLayoutGuide key="frameLayoutGuide" id="mxm-o6-oh0"/>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="GeR-ha-19K"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="QU1-fM-pg9" firstAttribute="leading" secondItem="GeR-ha-19K" secondAttribute="leading" id="2L5-dj-u12"/>
|
||||||
|
<constraint firstItem="3qB-gN-hV4" firstAttribute="top" secondItem="qMS-vC-b1G" secondAttribute="top" constant="50" id="5wp-eN-0MI"/>
|
||||||
|
<constraint firstItem="QU1-fM-pg9" firstAttribute="bottom" secondItem="GeR-ha-19K" secondAttribute="bottom" id="GFq-A2-u0c"/>
|
||||||
|
<constraint firstItem="3qB-gN-hV4" firstAttribute="centerX" secondItem="GN2-ta-IyD" secondAttribute="centerX" id="LUL-nW-cla"/>
|
||||||
|
<constraint firstItem="GN2-ta-IyD" firstAttribute="leading" secondItem="GeR-ha-19K" secondAttribute="leading" id="VhT-FE-K4T"/>
|
||||||
|
<constraint firstItem="QU1-fM-pg9" firstAttribute="trailing" secondItem="GeR-ha-19K" secondAttribute="trailing" id="fHj-pY-4pl"/>
|
||||||
|
<constraint firstItem="GN2-ta-IyD" firstAttribute="top" secondItem="qMS-vC-b1G" secondAttribute="top" id="kCO-cp-Ym3"/>
|
||||||
|
<constraint firstItem="QU1-fM-pg9" firstAttribute="top" secondItem="3qB-gN-hV4" secondAttribute="bottom" id="pfW-Rd-6RH"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="GN2-ta-IyD" secondAttribute="bottom" id="yZ0-Sh-Gv6"/>
|
||||||
|
<constraint firstItem="GeR-ha-19K" firstAttribute="trailing" secondItem="GN2-ta-IyD" secondAttribute="trailing" id="zph-z4-Zd0"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<navigationItem key="navigationItem" id="LZ1-Kz-jec"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="aboveAgeView" destination="3nX-lb-ERZ" id="JdV-YA-bWW"/>
|
||||||
|
<outlet property="aboveLabel" destination="VUN-Ep-Tia" id="akF-nG-Vnu"/>
|
||||||
|
<outlet property="aboveTextLabel" destination="wSp-wJ-fpO" id="XnA-TU-eez"/>
|
||||||
|
<outlet property="iAmAboveLabel" destination="Lap-hA-rD3" id="Pyo-7D-3vx"/>
|
||||||
|
<outlet property="iAmUnderLabel" destination="nDM-Lp-P02" id="py1-jw-eJz"/>
|
||||||
|
<outlet property="magicNoLabel" destination="z1g-nr-hDh" id="amS-QG-gNm"/>
|
||||||
|
<outlet property="numberText" destination="Q5x-RL-o9O" id="IKI-4h-lAU"/>
|
||||||
|
<outlet property="privacyLabel" destination="kAc-XC-R0J" id="jDr-Ms-iiA"/>
|
||||||
|
<outlet property="underAgeView" destination="zRB-HI-qyw" id="OhR-SA-MaA"/>
|
||||||
|
<outlet property="underLabel" destination="BhH-nh-RaQ" id="nLL-pM-dxH"/>
|
||||||
|
<outlet property="underTextLabel" destination="VuZ-1Z-b39" id="697-Oy-eq3"/>
|
||||||
|
<outlet property="wokaLogoTopSpacing" destination="5wp-eN-0MI" id="Ko3-zs-L2j"/>
|
||||||
|
<outlet property="yearsLabel" destination="5xD-nv-Vqh" id="Gi6-aP-veL"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="qz4-v9-A9M" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="2750.7246376811595" y="2.6785714285714284"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="16Years" width="99" height="79.333335876464844"/>
|
||||||
|
<image name="BackgroundSplash" width="428" height="926"/>
|
||||||
|
<image name="WokaLogo" width="2224" height="450.5"/>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
115
WOKA/OnBoarding Module/Controller/OnBoardVC.swift
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
//
|
||||||
|
// OnBoardVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import Lottie
|
||||||
|
|
||||||
|
class OnBoardVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet var viewLottie: UIView!
|
||||||
|
@IBOutlet weak var wokaLogoTopConstriant: NSLayoutConstraint!
|
||||||
|
@IBOutlet weak var carouselCV: UICollectionView!
|
||||||
|
@IBOutlet weak var pageControl: UIPageControl!
|
||||||
|
@IBOutlet weak var createAccountBtn: UIButton!
|
||||||
|
@IBOutlet weak var loginBtn: UIButton!
|
||||||
|
@IBOutlet weak var loginAsGuestBtn: UIButton!
|
||||||
|
@IBOutlet weak var mainStack: UIStackView!
|
||||||
|
|
||||||
|
var topConstriantFromSplash = Float()
|
||||||
|
var vm = OnBoardVM()
|
||||||
|
|
||||||
|
// MARK: - LifeCycle
|
||||||
|
|
||||||
|
deinit{
|
||||||
|
AuthFunc.shareInstance.stopSound()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
AuthFunc.shareInstance.playStartUpsound()
|
||||||
|
vm.initData()
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func pageControl(_ sender: UIPageControl) {
|
||||||
|
self.carouselCV.scrollToItem(at: IndexPath(row: sender.currentPage, section: 0), at: .centeredHorizontally, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||||
|
vm.resumeBackGroundAnimationJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||||
|
vm.stopBackGroundAnimationJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Button Tap Handler
|
||||||
|
|
||||||
|
@IBAction func createAccountBtnTapped(_ sender: UIButton) {
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.main, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.OnBoarding.selectAgeVC) as! SelectAgeVC
|
||||||
|
self.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func loginBtnTapped(_ sender: UIButton) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func guestLoginBtnTapped(_ sender: UIButton) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - Collection Scroll Handling
|
||||||
|
|
||||||
|
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
|
||||||
|
let visibleRect = CGRect(origin: self.carouselCV.contentOffset, size: self.carouselCV.bounds.size)
|
||||||
|
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
|
||||||
|
if let visibleIndexPath = self.carouselCV.indexPathForItem(at: visiblePoint) {
|
||||||
|
self.pageControl.currentPage = visibleIndexPath.row
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - Collection delegate and datasource
|
||||||
|
|
||||||
|
extension OnBoardVC : UICollectionViewDelegate,UICollectionViewDataSource{
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||||
|
return vm.data?.count ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||||
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: K.CellIdentifier.OnBoarding.onBoardCell, for: indexPath) as! OnBoardCell
|
||||||
|
if let data = vm.data?[indexPath.row]{
|
||||||
|
cell.setData(data: data)
|
||||||
|
}
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Collection Flow Layout
|
||||||
|
|
||||||
|
extension OnBoardVC : UICollectionViewDelegateFlowLayout{
|
||||||
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
||||||
|
return 10
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
||||||
|
let frameSize = collectionView.frame.size
|
||||||
|
return CGSize(width: frameSize.width - 10, height: frameSize.height)
|
||||||
|
}
|
||||||
|
|
||||||
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
|
||||||
|
return UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)
|
||||||
|
}
|
||||||
|
}
|
||||||
51
WOKA/OnBoarding Module/Controller/SelectAgeVC.swift
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// SelectAgeVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class SelectAgeVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var underAgeView: UIView!
|
||||||
|
@IBOutlet weak var aboveAgeView: UIView!
|
||||||
|
|
||||||
|
@IBOutlet weak var privacyLabel: UILabel!
|
||||||
|
@IBOutlet weak var magicNoLabel: UILabel!
|
||||||
|
@IBOutlet weak var yearsLabel: UILabel!
|
||||||
|
@IBOutlet weak var iAmUnderLabel: UILabel!
|
||||||
|
@IBOutlet weak var iAmAboveLabel: UILabel!
|
||||||
|
@IBOutlet weak var underLabel: UILabel!
|
||||||
|
@IBOutlet weak var aboveLabel: UILabel!
|
||||||
|
@IBOutlet weak var underTextLabel: UILabel!
|
||||||
|
@IBOutlet weak var aboveTextLabel: UILabel!
|
||||||
|
@IBOutlet weak var numberText: UILabel!
|
||||||
|
@IBOutlet weak var wokaLogoTopSpacing: NSLayoutConstraint!
|
||||||
|
|
||||||
|
var vm = SelectAgeVM()
|
||||||
|
|
||||||
|
// MARK: - LifeCycle
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.initData()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - Button Tap Handler
|
||||||
|
|
||||||
|
}
|
||||||
95
WOKA/OnBoarding Module/Controller/SplashVC.swift
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
//
|
||||||
|
// SplashVC.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import Lottie
|
||||||
|
|
||||||
|
class SplashVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var wokaLogo: UIImageView!
|
||||||
|
@IBOutlet weak var hindiBtn: UIButton!
|
||||||
|
@IBOutlet weak var englishBtn: UIButton!
|
||||||
|
@IBOutlet weak var languageBtnStack: UIStackView!
|
||||||
|
@IBOutlet weak var wokaOriginY: NSLayoutConstraint!
|
||||||
|
|
||||||
|
var vm = SplashVM()
|
||||||
|
|
||||||
|
// MARK: - View Life Cycle
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
vm.vc = self
|
||||||
|
vm.playSplashSound()
|
||||||
|
animateImageScale()
|
||||||
|
self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func languageBtnTapped(_ sender: UIButton) {
|
||||||
|
switch sender{
|
||||||
|
case hindiBtn:
|
||||||
|
K.GVar.localized = K.LocalizedEnum.hindi
|
||||||
|
case englishBtn:
|
||||||
|
K.GVar.localized = K.LocalizedEnum.english
|
||||||
|
default:
|
||||||
|
K.GVar.localized = K.LocalizedEnum.english
|
||||||
|
}
|
||||||
|
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.main, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.OnBoarding.onBoardVC) as! OnBoardVC
|
||||||
|
|
||||||
|
// Create a CATransition instance
|
||||||
|
let transition = CATransition()
|
||||||
|
transition.duration = 0.3 // Set the duration of the animation
|
||||||
|
transition.type = CATransitionType.fade // Set the type of animation to fade
|
||||||
|
|
||||||
|
// Optionally, set other properties such as timing function, subtype, etc.
|
||||||
|
// transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
|
||||||
|
// transition.subtype = CATransitionSubtype.fromTop
|
||||||
|
|
||||||
|
// Get the navigation controller
|
||||||
|
guard let navigationController = navigationController else { return }
|
||||||
|
|
||||||
|
// Perform the push animation with the custom transition
|
||||||
|
navigationController.view.layer.add(transition, forKey: nil)
|
||||||
|
navigationController.pushViewController(vc, animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func animateImageScale() {
|
||||||
|
UIView.animate(withDuration: 3.0, delay: 0, options: [], animations: {
|
||||||
|
self.wokaLogo.transform = CGAffineTransform(scaleX: 1.8, y: 1.8)
|
||||||
|
}, completion: nil)
|
||||||
|
|
||||||
|
let newConstant = wokaOriginY.constant - 50
|
||||||
|
|
||||||
|
Timer.scheduledTimer(withTimeInterval: 6, repeats: false) { _ in
|
||||||
|
UIView.animate(withDuration: 0.5, animations: {
|
||||||
|
// Update the constant value of the top constraint
|
||||||
|
self.wokaOriginY.constant = newConstant
|
||||||
|
// Inform the layout system to update
|
||||||
|
self.view.layoutIfNeeded()
|
||||||
|
}) { _ in
|
||||||
|
UIView.animate(withDuration: 0.3, delay: 0,options : [.transitionCrossDissolve],animations: {
|
||||||
|
// Set the isHidden property of the view
|
||||||
|
self.languageBtnStack.isHidden = false
|
||||||
|
}) {_ in
|
||||||
|
|
||||||
|
|
||||||
|
// Inform the stack view to update its layout
|
||||||
|
self.languageBtnStack.layoutIfNeeded()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLayoutSubviews() {
|
||||||
|
vm.initView()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
14
WOKA/OnBoarding Module/Model/CarouselData.swift
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// CarouselData.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct CarouselData{
|
||||||
|
let title : String
|
||||||
|
let desc : String
|
||||||
|
let image : String
|
||||||
|
}
|
||||||
27
WOKA/OnBoarding Module/View/OnBoardCell.swift
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// OnBoardCell.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class OnBoardCell: UICollectionViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var carouselImage: UIImageView!
|
||||||
|
@IBOutlet weak var heading: UILabel!
|
||||||
|
@IBOutlet weak var subHead: UILabel!
|
||||||
|
|
||||||
|
override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
// Initialization code
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func setData(data : CarouselData){
|
||||||
|
self.carouselImage.image = UIImage(named: data.image)
|
||||||
|
self.heading.text = data.title
|
||||||
|
self.subHead.text = data.desc
|
||||||
|
}
|
||||||
|
}
|
||||||
91
WOKA/OnBoarding Module/View/OnBoardCell.xib
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||||
|
<device id="retina6_12" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
|
||||||
|
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="Exo2-Bold.ttf">
|
||||||
|
<string>Exo2-Bold</string>
|
||||||
|
</array>
|
||||||
|
<array key="Exo2-Regular.ttf">
|
||||||
|
<string>Exo2-Regular</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="OnBoardCell" id="gTV-IL-0wX" customClass="OnBoardCell" customModule="WOKA" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="442"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="442"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="O8c-Dr-seP">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="442"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ijP-88-pXW">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="279"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="5th-Sm-oox">
|
||||||
|
<rect key="frame" x="20" y="10" width="234" height="259"/>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="5th-Sm-oox" firstAttribute="leading" secondItem="ijP-88-pXW" secondAttribute="leading" constant="20" id="cKO-Ru-NsK"/>
|
||||||
|
<constraint firstItem="5th-Sm-oox" firstAttribute="top" secondItem="ijP-88-pXW" secondAttribute="top" constant="10" id="cwc-gj-BYl"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="5th-Sm-oox" secondAttribute="bottom" constant="10" id="p6I-3w-yXb"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="5th-Sm-oox" secondAttribute="trailing" constant="20" id="sCu-DR-jBh"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Dkk-pi-h3c">
|
||||||
|
<rect key="frame" x="0.0" y="299" width="274" height="143"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalCompressionResistancePriority="749" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="20" translatesAutoresizingMaskIntoConstraints="NO" id="paa-o2-Dbu">
|
||||||
|
<rect key="frame" x="5" y="0.0" width="264" height="72.333333333333329"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="22"/>
|
||||||
|
<color key="textColor" red="0.035294117647058823" green="0.0" blue="0.36470588235294116" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumFontSize="16" translatesAutoresizingMaskIntoConstraints="NO" id="qhy-ql-pmY">
|
||||||
|
<rect key="frame" x="5" y="87.333333333333314" width="264" height="21.666666666666671"/>
|
||||||
|
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="18"/>
|
||||||
|
<color key="textColor" name="TextDarkBlue"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<edgeInsets key="layoutMargins" top="0.0" left="5" bottom="0.0" right="5"/>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="O8c-Dr-seP" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="5Pf-kM-sJW"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="O8c-Dr-seP" secondAttribute="trailing" id="JwU-uf-5EQ"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="O8c-Dr-seP" secondAttribute="bottom" id="ehf-sF-knf"/>
|
||||||
|
<constraint firstItem="ijP-88-pXW" firstAttribute="height" secondItem="gTV-IL-0wX" secondAttribute="height" multiplier="0.631222" id="g6X-mP-Zn9"/>
|
||||||
|
<constraint firstItem="O8c-Dr-seP" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="v6L-aV-PBf"/>
|
||||||
|
</constraints>
|
||||||
|
<size key="customSize" width="274" height="442"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="carouselImage" destination="5th-Sm-oox" id="YdR-SE-LLP"/>
|
||||||
|
<outlet property="heading" destination="paa-o2-Dbu" id="RHa-BD-FFo"/>
|
||||||
|
<outlet property="subHead" destination="qhy-ql-pmY" id="cM2-kd-Leg"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="300.76335877862596" y="126.7605633802817"/>
|
||||||
|
</collectionViewCell>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<namedColor name="TextDarkBlue">
|
||||||
|
<color red="0.10599999874830246" green="0.050999999046325684" blue="0.60399997234344482" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</namedColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
84
WOKA/OnBoarding Module/ViewModel/SelectAgeVM.swift
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
//
|
||||||
|
// SelectAgeVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by Bilal on 26/04/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class SelectAgeVM{
|
||||||
|
|
||||||
|
weak var vc : SelectAgeVC!
|
||||||
|
|
||||||
|
func initData(){
|
||||||
|
vc.underAgeView.roundCorner(radius: 25)
|
||||||
|
vc.aboveAgeView.roundCorner(radius: 25)
|
||||||
|
|
||||||
|
// Add tap gesture recognizer to the view
|
||||||
|
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(kid))
|
||||||
|
vc.underAgeView.addGestureRecognizer(tapGesture)
|
||||||
|
|
||||||
|
// Add tap gesture recognizer to the view
|
||||||
|
let tapGesture2 = UITapGestureRecognizer(target: self, action: #selector(adult))
|
||||||
|
vc.aboveAgeView.addGestureRecognizer(tapGesture2)
|
||||||
|
|
||||||
|
vc.privacyLabel.text = "We Value Your Privacy".localized(loc: K.GVar.localized)
|
||||||
|
vc.magicNoLabel.text = "16 IS THE MAGIC NUMBER".localized(loc: K.GVar.localized)
|
||||||
|
vc.yearsLabel.text = "YEARS".localized(loc: K.GVar.localized)
|
||||||
|
vc.iAmAboveLabel.text = "I AM".localized(loc: K.GVar.localized)
|
||||||
|
vc.iAmUnderLabel.text = "I AM".localized(loc: K.GVar.localized)
|
||||||
|
vc.underLabel.text = "UNDER".localized(loc: K.GVar.localized)
|
||||||
|
vc.aboveLabel.text = "ABOVE".localized(loc: K.GVar.localized)
|
||||||
|
vc.numberText.text = "16".localized(loc: K.GVar.localized)
|
||||||
|
vc.underTextLabel.text = "We will need your parent’s email so they can verify and agree to create an account.".localized(loc: K.GVar.localized)
|
||||||
|
vc.aboveTextLabel.text = "Above 16 users will be registered as a guardian with additional content.".localized(loc: K.GVar.localized)
|
||||||
|
|
||||||
|
self.vc.wokaLogoTopSpacing.constant = CheckPhoneHomeBtnOrNotch.shareInstance.topConstriant()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func kid() {
|
||||||
|
// Apply click effect animation
|
||||||
|
UIView.animate(withDuration: 0.1, animations: {
|
||||||
|
self.vc.underAgeView.transform = CGAffineTransform(scaleX: 0.9, y: 0.9)
|
||||||
|
}) { _ in
|
||||||
|
UIView.animate(withDuration: 0.1) {
|
||||||
|
self.vc.underAgeView.transform = .identity
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AuthFunc.shareInstance.userType = .kid
|
||||||
|
pushToEmail()
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func adult() {
|
||||||
|
// Apply click effect animation
|
||||||
|
UIView.animate(withDuration: 0.1, animations: {
|
||||||
|
self.vc.aboveAgeView.transform = CGAffineTransform(scaleX: 0.9, y: 0.9)
|
||||||
|
}) { _ in
|
||||||
|
UIView.animate(withDuration: 0.1) {
|
||||||
|
self.vc.aboveAgeView.transform = .identity
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AuthFunc.shareInstance.userType = .adult
|
||||||
|
pushToEmail()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func pushToEmail(){
|
||||||
|
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
|
||||||
|
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.emailVC) as! EmailVC
|
||||||
|
self.vc.navigationController?.pushViewController(vc, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extension String {
|
||||||
|
|
||||||
|
var localized: String {
|
||||||
|
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func localizedWithComment(comment:String) -> String {
|
||||||
|
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: comment)
|
||||||
|
}
|
||||||
|
}
|
||||||
38
WOKA/OnBoarding Module/ViewModel/SplashVM.swift
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// SplashVM.swift
|
||||||
|
// WOKA
|
||||||
|
//
|
||||||
|
// Created by MacBook Pro on 25/04/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
|
class SplashVM{
|
||||||
|
|
||||||
|
weak var vc : SplashVC!
|
||||||
|
var player: AVAudioPlayer?
|
||||||
|
|
||||||
|
func playSplashSound() {
|
||||||
|
guard let path = Bundle.main.path(forResource: K.StaticFilesString.wokaSplashSound, ofType:"m4a") else {
|
||||||
|
return }
|
||||||
|
let url = URL(fileURLWithPath: path)
|
||||||
|
|
||||||
|
do {
|
||||||
|
player = try AVAudioPlayer(contentsOf: url)
|
||||||
|
player?.play()
|
||||||
|
|
||||||
|
} catch let error {
|
||||||
|
print(error.localizedDescription)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initView(){
|
||||||
|
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
|
||||||
|
let color2 = #colorLiteral(red: 0.4862745098, green: 0.1960784314, blue: 0.7019607843, alpha: 1)
|
||||||
|
vc.hindiBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
|
||||||
|
vc.englishBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
|
||||||
|
vc.hindiBtn.roundCorner()
|
||||||
|
vc.englishBtn.roundCorner()
|
||||||
|
}
|
||||||
|
}
|
||||||
9
WOKA/OnBoarding Module/en.lproj/Main.strings
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
/* Class = "UILabel"; text = "Hello"; ObjectID = "0Ab-Q1-iCR"; */
|
||||||
|
"0Ab-Q1-iCR.text" = "Hello";
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "हिंदी"; ObjectID = "SYp-e1-w6s"; */
|
||||||
|
"SYp-e1-w6s.normalTitle" = "हिंदी";
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "English"; ObjectID = "XdB-NB-osA"; */
|
||||||
|
"XdB-NB-osA.normalTitle" = "English";
|
||||||
6
WOKA/OnBoarding Module/hi.lproj/Main.strings
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "हिंदी"; ObjectID = "SYp-e1-w6s"; */
|
||||||
|
"SYp-e1-w6s.normalTitle" = "हिंदी";
|
||||||
|
|
||||||
|
/* Class = "UIButton"; normalTitle = "English"; ObjectID = "XdB-NB-osA"; */
|
||||||
|
"XdB-NB-osA.normalTitle" = "English";
|
||||||