// // 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 { }