| | |
| | | class HomeListenFight_lesson_1_VC: BaseVC { |
| | | |
| | | private var viewModel = FightAnswerViewModel() |
| | | private var listen1Model:Listen1Model! |
| | | private var listenNewModel:ListenNewModel! |
| | | private var randomElement:Listen1SubModel? |
| | | private var page:Int! |
| | | var rootViewModel:HomeListenFightViewModel! |
| | | private var isListen:Bool = false |
| | | private var isAnsterComplete:Bool = false //是否已经回答完成 |
| | | private var isAnsterComplete:Bool = false //是否已经回答完成[小题] |
| | | private var isAnsterDone:Bool = false //是否已经回答完成[大题] |
| | | |
| | | private var isAnsterModel = Set<Listen1SubModel>() |
| | | private var menuView:VoiceHandleView? |
| | | |
| | | private lazy var collectionView:UICollectionView = { |
| | |
| | | return collection |
| | | }() |
| | | |
| | | required init(page:Int,listen1Model:Listen1Model){ |
| | | required init(page:Int,listenNewModel:ListenNewModel){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.page = page |
| | | self.listen1Model = listen1Model |
| | | self.listen1Model.subjectList.shuffle() |
| | | self.listenNewModel = listenNewModel |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | |
| | | print("加载======DidLoad") |
| | | |
| | | //制造随机 |
| | | randomElement = listen1Model.subjectList.randomElement() |
| | | menuView?.playUrl = randomElement?.correct |
| | | listenNewModel.subjectList[page].shuffle() |
| | | getNextAnswer() |
| | | menuView?.listenType = .lesson1 |
| | | |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+2) { |
| | |
| | | |
| | | |
| | | func restore(){ |
| | | isAnsterModel.removeAll() |
| | | isAnsterComplete = false |
| | | viewModel.answerType.accept(.none) |
| | | viewModel.selectIndex.accept(nil) |
| | | menuView?.resetView() |
| | | setUI() |
| | | collectionView.reloadData() |
| | | } |
| | | |
| | | private func getNextAnswer(){ |
| | | if isAnsterModel.count == 4{ |
| | | print("答题答满了");return |
| | | } |
| | | |
| | | randomElement = listenNewModel.subjectList[page].randomElement() |
| | | if randomElement != nil{ |
| | | if isAnsterModel.contains(randomElement!){ |
| | | getNextAnswer();return |
| | | } |
| | | isAnsterModel.insert(randomElement!) |
| | | } |
| | | menuView?.playUrl = randomElement?.correct |
| | | |
| | | listenNewModel.subjectList[page].shuffle() |
| | | isAnsterComplete = false |
| | | viewModel.answerType.accept(.none) |
| | | collectionView.reloadData() |
| | | setUI() |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | |
| | | override func setRx() { |
| | | viewModel.selectIndex.subscribe(onNext: {[weak self] index in |
| | | guard let weakSelf = self else { return } |
| | | guard let index = index else { return } |
| | | if weakSelf.viewModel.answerType.value == .success {return} |
| | | //判断选中是否正确逻辑 |
| | | if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: index) as? ListenFight_lesson_1_CCell{ |
| | | var answer:Fight_lessonType = .none |
| | | |
| | | if self?.randomElement?.id == self?.listen1Model.subjectList[index.row].id{ |
| | | if self?.randomElement?.id == weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id{ |
| | | answer = .success |
| | | if self?.isAnsterComplete == false{ |
| | | self?.rootViewModel.correctNum += 1 |
| | | } |
| | | self?.isAnsterComplete = true |
| | | VoicePlayer.share().playerAt(url: self?.listen1Model.subjectList[index.row].correct) |
| | | VoicePlayer.share().playerAt(url: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].correct) |
| | | }else{ |
| | | answer = .fail |
| | | if self?.isAnsterComplete == false{ |
| | |
| | | case .fail: |
| | | self?.viewModel.answerType.accept(.fail) |
| | | // self?.collectionView.isUserInteractionEnabled = false |
| | | self?.answerFail(errorSound: self?.listen1Model.subjectList[index.row].error) |
| | | self?.answerFail(errorSound: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].error) |
| | | default:break |
| | | } |
| | | } |
| | |
| | | //回答正确 |
| | | private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){ |
| | | menuView?.snp.removeConstraints() |
| | | // collectionView.isUserInteractionEnabled = false |
| | | let v = cell.view_topHandle.convert(cell.bounds, to: self.view) |
| | | UIView.animate(withDuration: 0.3) { |
| | | self.menuView?.snp.updateConstraints { make in |
| | |
| | | }else{ |
| | | cell.setState(state: .none) |
| | | } |
| | | cell.setListen1SubModel(listen1Model.subjectList[indexPath.row]) |
| | | cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row]) |
| | | return cell |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return min(4,listen1Model.subjectList.count) |
| | | return listenNewModel.subjectList[page].count |
| | | } |
| | | } |
| | | |
| | |
| | | func playComplete() { |
| | | isListen = true |
| | | self.menuView?.resetView() |
| | | if self.isAnsterComplete{ |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+3){ |
| | | if isAnsterModel.count == 4{ |
| | | |
| | | if !isAnsterDone{ |
| | | let v = rootViewModel.answerCount.value |
| | | rootViewModel.answerCount.accept(v + 1) |
| | | } |
| | | isAnsterDone = true |
| | | |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+3){[weak self] in |
| | | guard let weakSelf = self else { return } |
| | | NotificationCenter.default.post(name: NextLession_Noti, object: nil) |
| | | self.viewModel.answerType.accept(.none) |
| | | self.viewModel.selectIndex.accept(nil) |
| | | self.rootViewModel.answerItems[self.page] = self.listen1Model |
| | | weakSelf.viewModel.answerType.accept(.none) |
| | | weakSelf.viewModel.selectIndex.accept(nil) |
| | | weakSelf.rootViewModel.answerItems[weakSelf.page] = weakSelf.listenNewModel.subjectList[weakSelf.page] |
| | | } |
| | | } |
| | | |
| | | if isAnsterComplete{ |
| | | getNextAnswer() |
| | | if !isAnsterDone{ |
| | | let v = rootViewModel.answerCount.value |
| | | rootViewModel.answerCount.accept(v + 1) |
| | | } |
| | | } |
| | | } |