//
|
// ParentVerifiyView.swift
|
// DolphinEnglishLearnStudent
|
//
|
// Created by 无故事王国 on 2024/7/5.
|
//
|
|
import UIKit
|
import JQTools
|
import RxSwift
|
import QMUIKit
|
|
|
class ParentVerifiyView: UIView,JQNibView{
|
|
@IBOutlet weak var view_container: UIView!
|
@IBOutlet weak var label_num1: UILabel!
|
@IBOutlet weak var label_num2: UILabel!
|
|
@IBOutlet weak var view_in1: UIView!
|
@IBOutlet weak var label_in1: UILabel!
|
@IBOutlet weak var view_in2: UIView!
|
@IBOutlet weak var label_in2: UILabel!
|
@IBOutlet weak var view_in3: UIView!
|
@IBOutlet weak var label_in3: UILabel!
|
|
@IBOutlet weak var tf_input: QMUITextField!
|
|
private var num1 = 0
|
private var num2 = 0
|
private var total = 0
|
|
private var closue:(()->Void)!
|
|
private var disposeBag = DisposeBag()
|
|
override func awakeFromNib() {
|
super.awakeFromNib()
|
view_container.transform = .init(scaleX: 0.1, y: 0.1)
|
alpha = 0
|
layoutIfNeeded()
|
next()
|
|
tf_input.rx.text.changed.subscribe(onNext: {[weak self]text in
|
guard let weakSelf = self else { return }
|
weakSelf.label_in1.text = ""
|
weakSelf.label_in2.text = ""
|
weakSelf.label_in3.text = ""
|
|
guard !(text!.isEmpty) else {return}
|
guard text!.jq_isDigit else {return}
|
|
let array = weakSelf.splitInteger(number: Int(text!)!)
|
|
for (index,v) in array.enumerated(){
|
switch index {
|
case 0:weakSelf.label_in1.text = "\(v)"
|
case 1:weakSelf.label_in2.text = "\(v)"
|
case 2:weakSelf.label_in3.text = "\(v)"
|
default:
|
weakSelf.label_in1.text = ""
|
weakSelf.label_in2.text = ""
|
weakSelf.label_in3.text = ""
|
}
|
}
|
}).disposed(by: disposeBag)
|
|
tf_input.rx.controlEvent(.editingDidEnd).subscribe(onNext: {[weak self] _ in
|
guard let weakSelf = self else { return }
|
weakSelf.total = Int(weakSelf.tf_input.text ?? "0") ?? 0
|
}).disposed(by: disposeBag)
|
|
tf_input.returnKeyType = .done
|
tf_input.delegate = self
|
|
}
|
|
private func next(){
|
|
view_in3.isHidden = true
|
view_in2.isHidden = true
|
view_in1.isHidden = true
|
|
|
num1 = Int.random(in: 1...99)
|
num2 = Int.random(in: 1...99)
|
|
label_num1.text = "\(num1)"
|
label_num2.text = "\(num2)"
|
|
let tmep = num1 + num2
|
|
tf_input.maximumTextLength = UInt("\(tmep)".count)
|
|
switch "\(tmep)".count {
|
case 3:
|
view_in3.isHidden = false
|
fallthrough
|
case 2:
|
view_in2.isHidden = false
|
fallthrough
|
case 1:
|
view_in1.isHidden = false
|
fallthrough
|
default:break
|
}
|
}
|
|
static func show(verifiy:@escaping()->Void){
|
let verifiyView = ParentVerifiyView.jq_loadNibView()
|
verifiyView.frame = sceneDelegate?.window?.frame ?? .zero
|
verifiyView.closue = verifiy
|
sceneDelegate?.window?.addSubview(verifiyView)
|
|
UIView.animate(withDuration: 0.5) {
|
verifiyView.alpha = 1
|
verifiyView.view_container.transform = .init(scaleX: 1.0, y: 1.0)
|
}completion: { complete in
|
if complete{
|
verifiyView.tf_input.becomeFirstResponder()
|
}
|
}
|
|
}
|
|
private func splitInteger(number: Int) -> [Int] {
|
var digits: [Int] = []
|
var num = number
|
while num > 0 {
|
digits.append(num % 10)
|
num /= 10
|
}
|
return digits.reversed()
|
}
|
|
|
private func dismiss(){
|
UIView.animate(withDuration: 0.5) {
|
self.alpha = 0
|
self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
|
}completion: { complete in
|
self.removeFromSuperview()
|
}
|
}
|
@IBAction func dissmissAction(_ sender: Any) {
|
UIView.animate(withDuration: 0.5) {
|
self.alpha = 0
|
self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
|
}completion: { complete in
|
self.removeFromSuperview()
|
}
|
}
|
|
@IBAction func completeAction(_ sender: Any) {
|
verifiy()
|
}
|
|
private func verifiy(){
|
if num1 + num2 == total{
|
closue()
|
dismiss()
|
}else{
|
alertError(msg: "答题错误")
|
tf_input.text = ""
|
label_in1.text = ""
|
label_in2.text = ""
|
label_in3.text = ""
|
DispatchQueue.main.asyncAfter(delay: 2) {
|
self.tf_input.becomeFirstResponder()
|
}
|
next()
|
}
|
}
|
}
|
|
extension ParentVerifiyView:QMUITextFieldDelegate{
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
//输入是否是数值
|
if string.jq_isDigit{
|
return true
|
}
|
|
return false
|
}
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
if textField.text!.isEmpty{
|
alert(msg: "请输入答案");return false
|
}
|
|
if textField.text!.jq_isDigit{
|
textField.resignFirstResponder()
|
total = Int(textField.text!)!
|
return true
|
}
|
|
alertError(msg: "答题错误")
|
|
next()
|
|
return false
|
|
}
|
}
|