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

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