| | |
| | | |
| | | private var viewModel = FightAnswerViewModel() |
| | | |
| | | private var listen1Model:Listen1Model! |
| | | private var randomElement:Listen1SubModel? |
| | | private var page:Int! |
| | | var rootViewModel:HomeListenFightViewModel! |
| | | |
| | | private lazy var stackView:UIStackView = { |
| | | let stackView = UIStackView() |
| | | stackView.spacing = 78 |
| | |
| | | return collection |
| | | }() |
| | | |
| | | |
| | | required init(page:Int,listen1Model:Listen1Model){ |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.page = page |
| | | self.listen1Model = listen1Model |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | navigationItem.titleView = UIView() |
| | | viewModel.selectIndex.accept(IndexPath(row: 0, section: 0)) |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | super.setUI() |
| | | |
| | | viewModel.selectIndex.accept(IndexPath(row: 0, section: 0)) |
| | | |
| | | collectionView.delegate = self |
| | | collectionView.dataSource = self |
| | |
| | | make.width.greaterThanOrEqualTo(100) |
| | | } |
| | | |
| | | addStackView() |
| | | VoicePlayer.share().playEnd {[weak self] in |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | private func addStackView(){ |
| | | stackView.removeArrangedSubviews() |
| | | |
| | | var tempViews = [StudyHandleView]() |
| | | for index in 0...2{ |
| | | let handleView = StudyHandleView.jq_loadNibView() |
| | | handleView.listenType = .lesson2 |
| | | handleView.btn_choose.tag = 10 + index |
| | | |
| | | let row = viewModel.selectIndex.value!.row |
| | | let model = listen1Model.subjectList[row] |
| | | |
| | | if index == 0{ |
| | | handleView.vioceSoundUrl = model.correct |
| | | } |
| | | |
| | | if index == 1{ |
| | | handleView.vioceSoundUrl = model.error.components(separatedBy: ",").first |
| | | } |
| | | |
| | | if index == 2{ |
| | | handleView.vioceSoundUrl = model.error.components(separatedBy: ",").last |
| | | } |
| | | |
| | | handleView.chooseClouse {[weak self] btn in |
| | | guard let weakSelf = self else { return } |
| | | let row = weakSelf.viewModel.selectIndex.value!.row |
| | | |
| | | var lessionType:Fight_lessonType = .none |
| | | |
| | | lessionType = .success |
| | | if handleView.vioceSoundUrl == weakSelf.listen1Model.subjectList[row].correct{ |
| | | lessionType = .success |
| | | }else{ |
| | | lessionType = .fail |
| | | } |
| | | |
| | | switch lessionType { |
| | | case .success: |
| | | weakSelf.rootViewModel.correctNum += 1 |
| | | handleView.btn_choose.isEnabled = false |
| | | handleView.btn_state.setImage(UIImage(named: "icon_success_small"), for: .normal) |
| | | UIView.animate(withDuration: 0.5) { |
| | |
| | | self?.answerSuccess(cell,index: index) |
| | | } |
| | | case .fail: |
| | | weakSelf.rootViewModel.errorNum += 1 |
| | | handleView.btn_state.setImage(UIImage(named: "icon_waring_small"), for: .normal) |
| | | UIView.animate(withDuration: 0.5) { |
| | | handleView.btn_state.alpha = 1 |
| | |
| | | make.height.equalTo(52) |
| | | make.width.greaterThanOrEqualTo(159) |
| | | } |
| | | stackView.addArrangedSubview(handleView) |
| | | tempViews.append(handleView) |
| | | } |
| | | |
| | | tempViews.shuffle() //乱序 |
| | | stackView.addArrangedSubviews(tempViews) |
| | | } |
| | | |
| | | private func answerSuccess(_ cell:ListenFight_lesson_1_CCell,index:Int){ |
| | |
| | | self.view.layoutIfNeeded() |
| | | }completion: { _ in |
| | | self.resetStackView() |
| | | |
| | | } |
| | | } |
| | | |
| | | private func resetStackView(){ |
| | | for v in stackView.arrangedSubviews as! [StudyHandleView]{ |
| | | v.view_choose.alpha = 0 |
| | | v.btn_choose.isEnabled = true |
| | | v.btn_choose.isSelected = false |
| | | v.btn_state.setImage(nil, for: .normal) |
| | | } |
| | | let newRow = viewModel.selectIndex.value!.row+1 |
| | | viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0)) |
| | | |
| | | collectionView.reloadData() |
| | | if newRow == 4{ |
| | | NotificationCenter.default.post(name: NextLession_Noti, object: nil) |
| | | rootViewModel.answerItems[page] = listen1Model |
| | | NotificationCenter.default.post(name: NextLession_Noti, object: nil);return |
| | | } |
| | | addStackView() |
| | | } |
| | | |
| | | override func setRx() { |
| | | viewModel.selectIndex.subscribe(onNext: {[weak self] index in |
| | | |
| | | guard let index = index else { return } |
| | | |
| | | //判断选中是否正确逻辑 |
| | | if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: index) as? ListenFight_lesson_1_CCell{ |
| | | var answerType:Fight_lessonType = .none |
| | | answerType = .success |
| | | |
| | | switch answerType { |
| | | case .success: |
| | | self?.viewModel.answerType.accept(.success) |
| | | case .fail: |
| | | self?.viewModel.answerType.accept(.fail) |
| | | default:break |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | // viewModel.selectIndex.subscribe(onNext: {[weak self] index in |
| | | // guard let index = index else { return } |
| | | // //判断选中是否正确逻辑 |
| | | // if self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: index) is ListenFight_lesson_1_CCell{ |
| | | // var answerType:Fight_lessonType = .none |
| | | // answerType = .success |
| | | // switch answerType { |
| | | // case .success: |
| | | // self?.viewModel.answerType.accept(.success) |
| | | // self?.rootViewModel.correctNum += 1 |
| | | // case .fail: |
| | | // self?.viewModel.answerType.accept(.fail) |
| | | // self?.rootViewModel.errorNum += 1 |
| | | // default:break |
| | | // } |
| | | // } |
| | | // }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as! ListenFight_lesson_1_CCell |
| | | cell.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 5, radius: 5, offset: CGSize(width: 0, height: 1), opacity: 1) |
| | | cell.backgroundColor = .white |
| | | if viewModel.selectIndex.value?.row == indexPath.row{ |
| | | cell.label_title.isHidden = false |
| | | }else{ |
| | | cell.label_title.isHidden = true |
| | | } |
| | | cell.setListen1SubModel(listen1Model.subjectList[indexPath.row]) |
| | | cell.label_title.text = listen1Model.subjectList[indexPath.row].name |
| | | return cell |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return 4 |
| | | return min(4,listen1Model.subjectList.count) |
| | | } |
| | | } |