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.
 
 
 
 

792 lines
29 KiB

//
// RecipientTranscationViewController.swift
// GMERemittance
//
// Created by Fm-user on 12/22/17.
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class RecipientTranscationViewController: UIViewController {
@IBOutlet weak var pickerViewCurrency: UIPickerView!
@IBOutlet weak var viewContainWithKoreanCurrency: UIView!
@IBOutlet weak var viewContainWithOtherCountryCurrency: UIView!
@IBOutlet weak var availableBalance: UILabel!
@IBOutlet weak var viewContentMain: UIView!
@IBOutlet weak var buttonSave: UIButton!
@IBOutlet weak var dropDownCountryButton: UIButton!
@IBOutlet weak var imageViewCountry: UIImageView!
@IBOutlet weak var transferLimitMessageLabel: UILabel!
@IBOutlet weak var moneySendingMessageLabel: UILabel!
@IBOutlet weak var rewardPointlabel: UILabel!
@IBOutlet weak var serviceFeeLabel: UILabel!
@IBOutlet weak var transactionLimit: UILabel!
@IBOutlet weak var labelCurrency: UILabel!
@IBOutlet weak var labelExchangeRate: UILabel!
@IBOutlet weak var viewBalance: UIView!
@IBOutlet weak var viewExchange: UIView!
@IBOutlet weak var textFieldKRW: UITextField!
@IBOutlet weak var textFieldNPR: UITextField!
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
private var numberPad = UIKeyboardType.numberPad
private var amountNPR: Float!
private var networkDialogShown: Bool = false
private var buttomCurrencyStatus: Bool?
private var isScrolled: Bool = false
//Recieved from previous ViewController
var recipient: Recipient?
var paymentMode: String?
var paymentMethodId: String?
//Recieved, updated and transferred to next
var transferDetails: [String: String]?
//Added for home delivery
var homeDetails: [String: String]?
/// to send exchange body
private var exchangeData: [String: Any]?
private var pickerData: [String] = [String]()
private var calculateBy: String?
private var currencyDetailArray: [Currency] = [Currency]()
private var currencyArray = [String]()
private var transactionviewmodel = TransactionViewModel()
public static var recipientListViewControllerConnectionCheck = 0
@IBAction func selectPaymentMethod(_ sender: Any) {
dismissKeyboard()
performSegue(withIdentifier: "reviewTransfer", sender: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
setUpAnotherLoginListener(genericviewmodel: transactionviewmodel)
pickerViewCurrency.dataSource = self
pickerViewCurrency.delegate = self
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapKoreanCurrencyView))
tap.delegate = self as? UIGestureRecognizerDelegate
viewContainWithKoreanCurrency.addGestureRecognizer(tap)
let tapOtherView = UITapGestureRecognizer(target: self, action: #selector(handleTapOtherCountryCurrencyView))
tap.delegate = self as? UIGestureRecognizerDelegate
viewContainWithOtherCountryCurrency.addGestureRecognizer(tapOtherView)
///Background listner
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)
setUpNavBar(id: 201, title: "Send Money")
viewContentMain.isHidden = true
buttomCurrencyStatus = true
buttonSave.isUserInteractionEnabled = false
buttonSave.alpha = 0.3
textFieldPlaceHolderAttribute()
countryPickerViewButtonDesign()
transactionviewmodel.transactionViewConnectionTimeOut.value = nil
/**
connection timeout
*/
transactionviewmodel.transactionViewConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if RecipientTranscationViewController.recipientListViewControllerConnectionCheck == 0{
RecipientTranscationViewController.recipientListViewControllerConnectionCheck = RecipientTranscationViewController.recipientListViewControllerConnectionCheck+1
self.popUpMessage(value: 25)
}
}
/**
Check internet connection
*/
transactionviewmodel.internetConnection.value = nil
transactionviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if !self.networkDialogShown {
self.popUpMessage(value: 15)
self.networkDialogShown = true
}
}
guard paymentMode != nil else {
self.popUpMessageError(value: 10, message: "Error getting data")
return
}
if paymentMode! == paymentModeType.cashPayment.rawValue {
guard recipient != nil else {
self.popUpMessageError(value: 10, message: "Error getting data")
return
}
} else {
guard transferDetails?.count != 0 && recipient != nil else {
self.popUpMessageError(value: 10, message: "Error getting data")
return
}
transactionviewmodel.setTransferDetails(transferDetails: transferDetails!)
}
exchangeRateBindCall()
transactionInfoBindCall()
currrencyBindCall()
countryBindCall()
self.startLoading()
transactionviewmodel.fetchTransactionInfo(transactionInfo: transactionInfoParam())
transactionviewmodel.fetchCurrency(currencyInfo: currencyParam())
if let countryId = recipient?.countryId{
transactionviewmodel.fetchCountry(countryId: countryId)
}
textFieldKRW.delegate = self
textFieldNPR.delegate = self
viewBalance.layer.cornerRadius = 10
viewExchange.layer.cornerRadius = 10
}
/**
In case when app move to background
*/
@objc func appMovedToBackground() {
textFieldKRW.resignFirstResponder()
textFieldNPR.resignFirstResponder()
}
/**
Disable user interaction while fetching data from api
*/
func startLoading(){
disableUserInteractions()
showActivityIndicator(activityIndicator: activityIndicator)
}
/**
Enable user interaction while fetching data from api
*/
func stopLoading(){
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
self.enableUserInteractions()
}
/**
Handle tap action in view
*/
@objc func handleTapKoreanCurrencyView(){
textFieldKRW.becomeFirstResponder()
}
/**
Handle tap action in view
*/
@objc func handleTapOtherCountryCurrencyView(){
textFieldNPR.becomeFirstResponder()
}
/**
Api request for exchange rate
*/
func exchangeRateBindCall(){
transactionviewmodel.exchangeRateAvailable.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
self.popUpMessageError(value: 10, message: self.transactionviewmodel.getErrorMessage())
self.viewContentMain.isHidden = false
return
}
self.exchangeRateDisplay()
self.serviceFeeDataDisplay()
if self.paymentMode != paymentModeType.cashPayment.rawValue{
if let transferDetails = self.transferDetails{
self.transactionviewmodel.setTransferDetails(transferDetails: transferDetails)
}
}
self.textFieldNPR.text = self.transactionviewmodel.getpAmt()
self.textFieldKRW.text = self.transactionviewmodel.getcAmt()
self.rewardPointlabel.text = "+" + String(self.transactionviewmodel.getRewardPoint())
self.viewContentMain.isHidden = false
self.buttonSave.isUserInteractionEnabled = true
self.buttonSave.alpha = 1
}
}
/**
Api request for transaction info
*/
func transactionInfoBindCall(){
transactionviewmodel.transactionInfoAvailable.bind { [weak self] in
guard $0 != nil else {
return
}
self?.stopLoading()
guard $0! else {
self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
self?.viewContentMain.isHidden = false
return
}
if let availableBalance = UserDefaults.standard.object(forKey: "com.gmeremit.balance") as? String {
self?.availableBalance.text = (self?.getCommaAddedAmountString(amountString: availableBalance ))! + " KRW"
}
self?.setTransferLimitMessage(amount: String(format: "%.0f", (self?.transactionviewmodel.getTransferLimit())!))
self?.setTransactionLimit(amount:String(format: "%d", (self?.transactionviewmodel.getTransactionLimit())!))
self?.setMoneySendingMessage(sender:(self?.recipient?.getFullName())!)
self?.viewContentMain.isHidden = false
}
}
/**
Api request for currency
*/
func currrencyBindCall(){
transactionviewmodel.currencyInfoAvailable.bind{[weak self] in
guard $0 != nil else {
return
}
self?.stopLoading()
guard $0! else {
self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
self?.viewContentMain.isHidden = false
return
}
if let count = self?.transactionviewmodel.getCurrencyArray().count{
if count > 0{
self?.currencyDetailArray = (self?.transactionviewmodel.getCurrencyArray())!
self?.currencyArray = (self!.currencyDetailArray.map{$0.name!})
if let count = self?.currencyArray.count{
if count > 0{
self?.pickerData = (self?.currencyArray)!
}
}
if let currency = self?.pickerData[0]{
self?.labelCurrency.text = currency
self?.dropDownCountryButton.setTitle(currency + " ", for: UIControlState.normal)
}
}
}
}
}
/**
Api request for country
*/
func countryBindCall(){
transactionviewmodel.countryInfoAvailable.bind{[weak self] in
guard $0 != nil else {
return
}
self?.stopLoading()
guard $0! else {
self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
self?.viewContentMain.isHidden = false
return
}
if let flagUrl = self?.transactionviewmodel.getCountryDetail()[0].flagUrl{
self?.imageViewCountry?.sd_setImage(with:URL(string: flagUrl), placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
}
}
}
@IBAction func buttonCurrencyTap(_ sender: Any) {
pickerViewCurrency.reloadAllComponents()
if currencyArray.count != 0{
self.pickerData = self.currencyArray
}
buttomCurrencyStatus = !buttomCurrencyStatus!
if buttomCurrencyStatus! {
pickerViewCurrency.isHidden = true
} else {
pickerViewCurrency.isHidden = false
}
}
/**
Get payment method id
*/
func getPaymentMethodId() -> String{
if paymentMode == paymentModeType.cashPayment.rawValue || paymentMode == paymentModeType.cashPaymentPartner.rawValue {
paymentMethodId = paymentMethodIdType.cashMethod.rawValue
} else if paymentMode == paymentModeType.bankPayment.rawValue {
paymentMethodId = paymentMethodIdType.bankMethod.rawValue
} else if paymentMode == paymentModeType.homeDelivery.rawValue {
paymentMethodId = paymentMethodIdType.homeMethod.rawValue
}
return paymentMethodId!
}
/**
Get transaction info param
*/
func transactionInfoParam() -> [String: String]{
var transactionParam: [String: String]?
if let countryId = recipient?.countryId{
transactionParam = ["countryId": (countryId),
"payoutMethodId": getPaymentMethodId()]
}
return transactionParam!
}
/**
Get currency param
*/
func currencyParam() -> [String: String]{
var pam: [String: Any]?
if let countryId = recipient?.countryId{
pam = ["countryId": countryId,
"payoutMethodId": getPaymentMethodId(),
"payoutLocationId": transferDetails?["bankPayoutId"] ?? ""
] as [String : Any]
}
return pam as! [String : String]
}
/**
Text field place holder attribute
*/
func textFieldPlaceHolderAttribute(){
textFieldKRW.attributedPlaceholder = NSAttributedString(string: "0",
attributes: [NSAttributedStringKey.foregroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)])
textFieldNPR.attributedPlaceholder = NSAttributedString(string: "0",
attributes: [NSAttributedStringKey.foregroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)])
}
/**
Country picker view button design
*/
func countryPickerViewButtonDesign(){
dropDownCountryButton.layer.borderColor = UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0).cgColor
dropDownCountryButton.layer.borderWidth = 1.0
dropDownCountryButton.layer.cornerRadius = 8
}
/**
Exchange rate value display
*/
func exchangeRateDisplay(){
let exchangeRateValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let exchangeRate: String = String("Exchange Rate: ")
let mutableExchangeRate = NSMutableAttributedString(string: exchangeRate)
let mutableExchangeRateValue = NSMutableAttributedString(string: String(transactionviewmodel.getExchangeRate()))
mutableExchangeRateValue.addAttribute(NSAttributedStringKey.foregroundColor, value: exchangeRateValueColor, range: NSRange(location:0, length: mutableExchangeRateValue.length))
let exchangeRateData = NSMutableAttributedString()
exchangeRateData.append(mutableExchangeRate)
exchangeRateData.append(mutableExchangeRateValue)
labelExchangeRate.attributedText = exchangeRateData
}
/**
Display service fee data
*/
func serviceFeeDataDisplay(){
let serviceFeeValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let serviceFee: String = String("Service Fee: ")
let mutableServiceFee = NSMutableAttributedString(string: serviceFee)
let mutableServiceFeeValue = NSMutableAttributedString(string: transactionviewmodel.getTransferFee() + " KRW" + " (Inclusive)")
mutableServiceFeeValue.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeValueColor, range: NSRange(location:0, length: mutableServiceFeeValue.length))
let transferFee = NSMutableAttributedString()
transferFee.append(mutableServiceFee)
transferFee.append(mutableServiceFeeValue)
serviceFeeLabel.attributedText = transferFee
}
/**
Set custom first transaction message
*/
func setFirstTransactionFreeMessage(){
let feeMessage: String = String("Your First Transfer Fees is ")
let mutableFeeMessage1 = NSMutableAttributedString(string: feeMessage)
let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15),NSAttributedStringKey.foregroundColor:UIColor.red]
let freeMessageInBold = NSMutableAttributedString(string:"Free", attributes:attrs)
let mutableFeeMessage = NSMutableAttributedString()
mutableFeeMessage.append(mutableFeeMessage1)
mutableFeeMessage.append(freeMessageInBold)
}
/**
Set custom message money sending
*/
func setMoneySendingMessage(sender:String){
let sendingMessage: String = String("You are sending money to ")
let mutableSenderMessage1 = NSMutableAttributedString(string: sendingMessage)
let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
let senderMessageInBold = NSMutableAttributedString(string:sender, attributes:attrs)
let mutableSenderMessage = NSMutableAttributedString()
mutableSenderMessage.append(mutableSenderMessage1)
mutableSenderMessage.append(senderMessageInBold)
moneySendingMessageLabel.attributedText = mutableSenderMessage
}
/**
Set transfer limit message
*/
func setTransferLimitMessage(amount:String){
let transferMessage1: String = String("Transfer Limit Max \n")
let transferMessage3: String = String(" KRW per day")
let mutableTransferMessage1 = NSMutableAttributedString(string: transferMessage1)
let mutableTransferMessage3 = NSMutableAttributedString(string: transferMessage3)
let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
let transferMessageInBold = NSMutableAttributedString(string:"\(amount)", attributes:attrs)
let mutableTransferMessage = NSMutableAttributedString()
mutableTransferMessage.append(mutableTransferMessage1)
mutableTransferMessage.append(transferMessageInBold)
mutableTransferMessage.append(mutableTransferMessage3)
transferLimitMessageLabel.attributedText = mutableTransferMessage
}
/**
Set transaction limit message
*/
func setTransactionLimit(amount:String){
let transactionLimitMessage1: String = String("Transaction Limit Upto \n")
let transactionLimitMessage2: String = String(" times per day")
let mutableTransactionLimitMessage1 = NSMutableAttributedString(string: transactionLimitMessage1)
let mutableTransactionLimitMessage2 = NSMutableAttributedString(string: transactionLimitMessage2)
let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
let transactionLimitMessageInBold = NSMutableAttributedString(string:amount, attributes:attrs)
let mutableTransactionLimitMessage = NSMutableAttributedString()
mutableTransactionLimitMessage.append(mutableTransactionLimitMessage1)
mutableTransactionLimitMessage.append(transactionLimitMessageInBold)
mutableTransactionLimitMessage.append(mutableTransactionLimitMessage2)
transactionLimit.attributedText = mutableTransactionLimitMessage
}
@IBAction func buttonSavedMoney(_ sender: Any) {
guard let navController = self.navigationController else { return }
let popOverVC = UIStoryboard(name: "RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "savingPopup") as! PopUpSavingViewController
navController.addChildViewController(popOverVC)
popOverVC.view.frame = navController.view.bounds
navController.view.addSubview(popOverVC.view)
popOverVC.didMove(toParentViewController: navController)
}
/**
Add done and cancel button
*/
func addDoneButtonOnKeyboard()
{
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
doneToolbar.barStyle = .default
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
done.tintColor = UIColor(hex: 0xED1C24)
let cancel: UIBarButtonItem = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(self.cancelAction))
cancel.tintColor = UIColor.black
let items = [cancel, flexSpace, done]
doneToolbar.items = items
doneToolbar.sizeToFit()
self.textFieldKRW.inputAccessoryView = doneToolbar
self.textFieldNPR.inputAccessoryView = doneToolbar
}
/**
Add cancel button in keypad
*/
@objc func cancelAction()
{
textFieldKRW.text = ""
textFieldNPR.text = ""
serviceFeeLabel.text = "Exchange Rate:"
labelExchangeRate.text = "Service Fee:"
rewardPointlabel.text = ""
textFieldNPR.resignFirstResponder()
textFieldKRW.resignFirstResponder()
pickerViewCurrency.isHidden = true
if !buttomCurrencyStatus! {
buttomCurrencyStatus! = !buttomCurrencyStatus!
}
}
/**
Picker view done action button
*/
@objc func doneButtonAction()
{
self.networkDialogShown = false
textFieldKRW.resignFirstResponder()
textFieldNPR.resignFirstResponder()
guard textFieldNPR.text != "" || textFieldKRW.text != "" else {
self.popUpMessageInfo(value: 16, title: "Missing amount", message: "Please enter amount")
return
}
viewContentMain.isHidden = true
self.startLoading()
transactionviewmodel.fetchExchangeRate(exchangeData: exchangeData!)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "reviewTransfer" {
let reviewViewController
= segue.destination as! ReviewViewController
//ADDED FOR HOMEDELIVERY
if paymentMode! == paymentModeType.homeDelivery.rawValue {
if let localRecipient = recipient, let localCalculateBy = calculateBy , let localHomeDetails = homeDetails{
reviewViewController.transferDetails = transactionviewmodel.getTransferDetailsForHomeDelivery(recipient: localRecipient, paymentMethodId: getPaymentMethodId(), calcBy: localCalculateBy, homeDetails: localHomeDetails)
}
} else {
if let localRecipient = recipient, let localCalculateBy = calculateBy{
reviewViewController.transferDetails = transactionviewmodel.getTransferDetails(recipient: localRecipient, paymentMethodId: getPaymentMethodId(), calcBy: localCalculateBy)
}
}
reviewViewController.recipient = recipient
reviewViewController.paymentMode = self.paymentMode
}
}
}
extension RecipientTranscationViewController: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
addDoneButtonOnKeyboard()
buttonSave.isUserInteractionEnabled = false
buttonSave.alpha = 0.3
if textField == textFieldKRW {
textFieldNPR.text = ""
} else {
textFieldKRW.text = ""
}
checkScroll()
}
func textFieldDidEndEditing(_ textField: UITextField) {
checkScroll()
if textField == textFieldKRW {
calculateBy = "C"
if let countryId = recipient?.countryId{
exchangeData = ["from":"KRW",
"to":labelCurrency.text!,
"calcBy": calculateBy!,
"cAmt": textFieldKRW.text!,
"payoutmethodid": getPaymentMethodId(),
"countryId":countryId,
"sendMoney":true
]
}
} else {
if let countryId = recipient?.countryId{
calculateBy = "P"
exchangeData = ["from":"KRW",
"to":labelCurrency.text!,
"calcBy": calculateBy!,
"pAmt": textFieldNPR.text!,
"payoutmethodid": getPaymentMethodId(),
"countryId":countryId,
"sendMoney":true
]
}
}
textFieldKRW.sizeToFit()
textFieldNPR.sizeToFit()
}
func getWidth(text: String) -> CGFloat
{
let txtField = UITextField(frame: .zero)
txtField.text = text
txtField.sizeToFit()
return txtField.frame.size.width
}
override open func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString
string: String) -> Bool {
let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
if updatedText.count != 0 {
if textField == textFieldKRW {
if inputText.isDouble() {
if Double(inputText)! <= transactionviewmodel.getTransferLimit() {
return true
} else {
return false
}
}
} else {
if inputText.isDouble() {
if Double(inputText)! <= 999999999999999 {
return true
} else {
return false
}
}
}
}
return true
}
}
extension RecipientTranscationViewController: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return pickerData[row]
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let label = (view as? UILabel) ?? UILabel()
label.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0)
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 18)
label.text = pickerData[row]
return label
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
buttomCurrencyStatus = true
pickerViewCurrency.isHidden = true
dropDownCountryButton.setTitle(pickerData[row] + " ", for: UIControlState.normal)
labelCurrency.text = pickerData[row]
if textFieldKRW.text != "" && textFieldNPR.text != "" {
textFieldNPR.text = ""
buttonSave.isUserInteractionEnabled = false
buttonSave.alpha = 0.3
}
}
}
extension RecipientTranscationViewController : ScrollableProtocol {
var offset: CGFloat {
get {
return 160
}
}
var viewScrolled: Bool {
get {
return isScrolled
}
}
func checkScroll() {
if !viewScrolled {
performScroll(direction: 0)
isScrolled = !isScrolled
} else {
performScroll(direction: 1)
isScrolled = !isScrolled
}
}
func registerTapListener() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
view.addGestureRecognizer(tap)
}
@objc func clearKeyboard() {
textFieldKRW.resignFirstResponder()
textFieldNPR.resignFirstResponder()
if viewScrolled {
performScroll(direction: 1)
isScrolled = !isScrolled
}
}
func performScroll(direction: Int) {
if direction == 0 {
UIView.animate(withDuration: 0.3, animations: {
self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1)
})
} else if direction == 1 {
UIView.animate(withDuration: 0.3, animations: {
self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset)
})
}
}
}
extension String {
func isDouble() -> Bool {
if let doubleValue = Double(self) {
if doubleValue >= 0 {
return true
}
}
return false
}
}