You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
298 lines
9.4 KiB
298 lines
9.4 KiB
//
|
|
// SplashScreenViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by gme_2 on 10/09/2018.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import Localize_Swift
|
|
import DTTJailbreakDetection
|
|
|
|
class SplashScreenViewController: UIViewController {
|
|
|
|
private struct StringConstants {
|
|
let descriptionFirst = "hassle_free_transfer_text".localized()
|
|
let descriptionSecond = "connect_local_community_text".localized()
|
|
let descriptionThird = "earn_reward_point_text".localized()
|
|
let loginText = "login_text".localized()
|
|
let newUserText = "new_user_text".localized()
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
@IBOutlet private weak var imageViewDotCenter: UIImageView!
|
|
@IBOutlet private weak var imageViewDotLeft: UIImageView!
|
|
@IBOutlet private weak var imageViewDotRight: UIImageView!
|
|
|
|
@IBOutlet private weak var imageViewHomeLogo: UIImageView!
|
|
@IBOutlet private weak var labelHomeDescription: UILabel!
|
|
|
|
@IBOutlet private weak var buttonLogin: UIButton!
|
|
@IBOutlet private weak var buttonSignUp: UIButton!
|
|
|
|
@IBOutlet private weak var languageBackGroundView: UIView!
|
|
@IBOutlet private weak var languageLabel: UILabel!
|
|
|
|
private var languageTapGuesture: UITapGestureRecognizer?
|
|
// MARK: Properties
|
|
|
|
private var timer: Timer?
|
|
private var counter: Int = 0
|
|
|
|
private let imageDotSelected = UIImage(named: "dotSelected")
|
|
private let imageDotUnselected = UIImage(named: "dotUnselected")
|
|
|
|
private let imageFirst = UIImage(named: "ic_splashFirstScreen")
|
|
private let imageSecond = UIImage(named: "ic_splashSecondScreen")
|
|
private let imageThird = UIImage(named: "ic_splashThirdScreen")
|
|
|
|
private var languageIndex = 0
|
|
|
|
private var languages: [SendMoneyCountryViewModel] = []
|
|
private var selectedLanguage: SendMoneyCountryViewModel? {
|
|
didSet {
|
|
let code = Language.init(rawValue: selectedLanguage?.code ?? "en")?.code ?? "en"
|
|
|
|
Localize.setCurrentLanguage(code)
|
|
UserDefaults.standard.set(code, forKey: AppConstants.firstTimeLanguageIsSet)
|
|
|
|
setText()
|
|
}
|
|
}
|
|
|
|
var presenter: SplashScreenModuleInterface?
|
|
|
|
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
checkJailBreak()
|
|
self.setup()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.navigationItem.title = ""
|
|
self.hideNavBar()
|
|
self.setupTimer()
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
self.navigationItem.title = ""
|
|
self.timer?.invalidate()
|
|
|
|
}
|
|
|
|
// MARK: IBActions
|
|
private func checkJailBreak() {
|
|
if (DTTJailbreakDetection.isJailbroken()) {
|
|
self.alert(message: "Your device is jail broken.", title: "Alert!") {
|
|
exit(0)
|
|
}
|
|
}
|
|
}
|
|
|
|
@IBAction private func login(_ sender: UIButton) {
|
|
self.presenter?.login()
|
|
}
|
|
|
|
|
|
@IBAction private func register(_ sender: UIButton) {
|
|
self.presenter?.register()
|
|
}
|
|
|
|
// MARK: Other Functions
|
|
|
|
private func hideNavBar() {
|
|
self.navigationController?.isNavigationBarHidden = true
|
|
self.navigationController?.navigationBar.barTintColor = AppConstants.themeRedColor
|
|
self.navigationController?.navigationBar.isTranslucent = false
|
|
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
|
|
self.navigationController?.navigationBar.shadowImage = UIImage()
|
|
}
|
|
|
|
private func setup() {
|
|
// all setup should be done here
|
|
hideNavBar()
|
|
setUpButtons()
|
|
imageViewDotLeft.image = UIImage(named: "dotSelected")
|
|
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(_SplashScreenViewController.handleSwipes(_:)))
|
|
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(_SplashScreenViewController.handleSwipes(_:)))
|
|
|
|
leftSwipe.direction = .left
|
|
rightSwipe.direction = .right
|
|
|
|
view.addGestureRecognizer(leftSwipe)
|
|
view.addGestureRecognizer(rightSwipe)
|
|
|
|
setLanguageBackgroundView()
|
|
}
|
|
|
|
private func setLanguageBackgroundView() {
|
|
let languageSelectionGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showCountryPickerview))
|
|
self.languageBackGroundView.addGestureRecognizer(languageSelectionGuesture)
|
|
|
|
self.languageBackGroundView.layer.cornerRadius = 10
|
|
self.languageBackGroundView.clipsToBounds = true
|
|
self.languageBackGroundView.layer.addShadow(offset: CGSize.init(width: 2, height: 2))
|
|
NotificationCenter.default.addObserver(self, selector: #selector(setText), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil)
|
|
|
|
setupLanguages()
|
|
configureLanguage()
|
|
|
|
// if exist a selected language then don't animate, and put in the selected language into languageLabel
|
|
if let language = UserDefaults.standard.string(forKey: AppConstants.firstTimeLanguageIsSet){
|
|
self.selectedLanguage = self.languages.filter{$0.code?.languageCode == language.languageCode}.first
|
|
} else {
|
|
configureTimer()
|
|
}
|
|
}
|
|
|
|
@objc private func setText() {
|
|
timer?.invalidate()
|
|
self.buttonLogin.setTitle("login_text".localized(), for: .normal)
|
|
self.buttonSignUp.setTitle("new_user_text".localized(), for: .normal)
|
|
self.languageLabel.text = self.selectedLanguage?.title
|
|
|
|
setImageandLabels()
|
|
}
|
|
|
|
private func setupLanguages() {
|
|
self.languages = Utility.getLanguages()
|
|
}
|
|
|
|
private func configureTimer() {
|
|
let timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(self.updateLanguage), userInfo: nil, repeats: true)
|
|
self.timer = timer
|
|
}
|
|
|
|
private func configureLanguage() {
|
|
self.buttonLogin.setTitle(StringConstants().loginText, for: .normal)
|
|
self.buttonSignUp.setTitle(StringConstants().newUserText, for: .normal)
|
|
}
|
|
|
|
@objc private func handleSwipes(_ sender: UISwipeGestureRecognizer) {
|
|
if (sender.direction == .right) {
|
|
counter = counter - 1
|
|
if counter < 0 {
|
|
counter = 2
|
|
}
|
|
}
|
|
|
|
if (sender.direction == .left) {
|
|
counter = counter + 1
|
|
if counter > 2 {
|
|
counter = 0
|
|
}
|
|
}
|
|
setImageandLabels()
|
|
}
|
|
|
|
@objc private func updateImage() {
|
|
counter += 1
|
|
if counter > 2 {
|
|
counter = 0
|
|
}
|
|
setImageandLabels()
|
|
}
|
|
|
|
private func setImageandLabels() {
|
|
|
|
imageViewDotLeft.image = imageDotUnselected
|
|
imageViewDotCenter.image = imageDotUnselected
|
|
imageViewDotRight.image = imageDotUnselected
|
|
|
|
switch counter {
|
|
case 0:
|
|
imageViewDotLeft.image = imageDotSelected
|
|
imageViewHomeLogo.image = imageFirst
|
|
labelHomeDescription.text = StringConstants().descriptionFirst
|
|
case 1:
|
|
|
|
imageViewDotCenter.image = imageDotSelected
|
|
imageViewHomeLogo.image = imageSecond
|
|
labelHomeDescription.text = StringConstants().descriptionSecond
|
|
case 2:
|
|
|
|
imageViewDotRight.image = imageDotSelected
|
|
imageViewHomeLogo.image = imageThird
|
|
labelHomeDescription.text = StringConstants().descriptionThird
|
|
default:
|
|
return
|
|
}
|
|
}
|
|
|
|
private func setUpButtons() {
|
|
buttonSignUp.layer.cornerRadius = 25
|
|
buttonLogin.backgroundColor = .clear
|
|
buttonLogin.layer.cornerRadius = 25
|
|
buttonLogin.layer.borderWidth = 1
|
|
buttonLogin.layer.borderColor = UIColor.white.cgColor
|
|
buttonSignUp.layer.borderWidth = 1
|
|
buttonSignUp.layer.borderColor = UIColor.white.cgColor
|
|
self.view.backgroundColor = AppConstants.themeRedColor
|
|
self.buttonSignUp.backgroundColor = AppConstants.themeDarkRedColor
|
|
self.buttonLogin.backgroundColor = AppConstants.themeBlueColor
|
|
// self.buttonSignUp.backgroundColor = AppConstants.themeBlueColor
|
|
}
|
|
|
|
private func setupTimer() {
|
|
self.timer?.fire()
|
|
}
|
|
|
|
@objc private func updateLanguage() {
|
|
|
|
self.changeText(text: self.languages.elementAt(index: self.languageIndex)?.name ?? "")
|
|
if (self.languageIndex + 1) >= (self.languages.count) {
|
|
self.languageIndex = 0
|
|
}else {
|
|
self.languageIndex += 1
|
|
}
|
|
}
|
|
|
|
private func changeText(text: String) {
|
|
let animation: CATransition = CATransition()
|
|
animation.timingFunction = CAMediaTimingFunction(name:
|
|
kCAMediaTimingFunctionEaseInEaseOut)
|
|
animation.type = kCATransitionPush
|
|
animation.subtype = kCATransitionFromTop
|
|
animation.duration = 0.8
|
|
|
|
let animation1: CATransition = CATransition()
|
|
animation1.timingFunction = CAMediaTimingFunction(name:
|
|
kCAMediaTimingFunctionEaseInEaseOut)
|
|
animation1.type = kCATransitionFade
|
|
animation1.subtype = kCATransitionReveal
|
|
animation1.duration = 0.8
|
|
languageLabel.layer.add(animation, forKey: kCATransitionPush)
|
|
|
|
self.languageLabel.text = text
|
|
}
|
|
|
|
@objc private func showCountryPickerview() {
|
|
setupLanguages()
|
|
let viewcontroller = UIStoryboard.init(name: "CountryPicker", bundle: nil).instantiateViewController(withIdentifier: "CountryPickerViewController") as! CountryPickerViewController
|
|
let data: [SendMoneyCountryViewModel] = self.languages
|
|
viewcontroller.isLanguageSelection = true
|
|
viewcontroller.data = data
|
|
viewcontroller.doneAction = self.countrySelected
|
|
viewcontroller.type = PickerTitle.country
|
|
self.present(viewcontroller, animated: true, completion: nil)
|
|
}
|
|
|
|
private func countrySelected(models: [SendMoneyCountryViewModel]) {
|
|
self.selectedLanguage = models.first
|
|
}
|
|
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
}
|
|
}
|
|
|
|
// MARK: SplashScreenViewInterface
|
|
extension SplashScreenViewController: SplashScreenViewInterface {
|
|
|
|
}
|