| | |
| | | class HomeListenFightViewModel{ |
| | | |
| | | /// 当前页数 |
| | | var currentPage = BehaviorRelay<Int>(value: 0) |
| | | // var subPage = BehaviorRelay<Int>(value: 1) //小题目角标 |
| | | var currentPage = BehaviorRelay<Int?>(value: nil) |
| | | var maxPage = BehaviorRelay<Int>(value: 5) |
| | | var listenType = BehaviorRelay<ListenType>(value:.lesson1) |
| | | var times:Int = 0 |
| | |
| | | btn_beAgain.addTarget(self, action: #selector(beAgaionAction), for: .touchUpInside) |
| | | |
| | | setPages() |
| | | pageVC.reloadData() |
| | | // pageVC.reloadData() |
| | | |
| | | timer = Timer(fire: .distantPast, interval: 1.0, repeats: true, block: {[weak self] _ in |
| | | self?.viewModel.times += 1 |
| | |
| | | |
| | | if let m = data as? ListenNewModel{ |
| | | self.pages = Array<ListenSubCardModel>.splitArray(m.list, subArraySize: 4) |
| | | let c = m.list.count / 4 |
| | | let c = m.subjectList.count |
| | | let totalW = 24 * c + 2 * (c - 1) |
| | | collection_card.snp.updateConstraints { make in |
| | | make.width.equalTo(totalW) |
| | | } |
| | | } |
| | | case .lesson2,.lesson3,.lesson4,.lesson5: |
| | | |
| | | case .lesson4: |
| | | if let m = data as? ListenNewModel{ |
| | | self.pages = Array<ListenSubCardModel>.splitArray(m.list, subArraySize: 4) |
| | | let totalW = 24 * m.subjectList.count + 2 * (m.subjectList.count - 1) |
| | | collection_card.snp.updateConstraints { make in |
| | | make.width.equalTo(totalW) |
| | | } |
| | | } |
| | | |
| | | case .lesson2,.lesson3,.lesson5: |
| | | if let m = data as? ListenNewModel{ |
| | | self.pages = Array<ListenSubCardModel>.splitArray(m.list, subArraySize: 1) |
| | | let totalW = 24 * m.list.count + 2 * (m.list.count - 1) |
| | |
| | | collection_card.reloadData() |
| | | let nextPage = floor(Double(maxPage) / 5.0) |
| | | pageVC.scroll(toPage: Int(nextPage), animation: false) |
| | | viewModel.currentPage.accept(Int(nextPage)) |
| | | viewModel.answerCount.accept(maxPage) |
| | | setPages() |
| | | |
| | |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(NextLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in |
| | | guard let weakSelf = self else { return } |
| | | let nextPage = weakSelf.viewModel.currentPage.value + 1 |
| | | let nextPage = (weakSelf.viewModel.currentPage.value ?? 0) + 1 |
| | | var asComplete:Bool = false |
| | | switch weakSelf.viewModel.listenType.value { |
| | | case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:asComplete = nextPage >= (weakSelf.data as! ListenNewModel).subjectList.count |
| | |
| | | |
| | | viewModel.currentPage.subscribe(onNext: {[weak self]currentPage in |
| | | guard let weakSelf = self else { return } |
| | | guard let currentPage else {return} |
| | | weakSelf.btn_forward.isHidden = currentPage <= 0 |
| | | weakSelf.setPages() |
| | | }).disposed(by: disposeBag) |
| | |
| | | } |
| | | |
| | | private func setPages(){ |
| | | guard let currentPage = viewModel.currentPage.value else {return} |
| | | switch viewModel.listenType.value{ |
| | | case .lesson1: |
| | | let m = data as! ListenNewModel |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.flatMap({$0}).count / 4)" |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.flatMap({$0}).count / 4)" |
| | | let correctNum = m.list.filter({$0.status == 2}).count //正确 |
| | | // if correctNum > 0 { |
| | | let ratio = Double(correctNum) / Double(m.list.count) * 100.0 |
| | | let ratioStr = ratio.jq_formatFloat |
| | | |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.flatMap({$0}).count / 4)\n正确率:\(ratioStr)%" |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.flatMap({$0}).count / 4)\n正确率:\(ratioStr)%" |
| | | // } |
| | | |
| | | maxPage = viewModel.answerCount.value |
| | | btn_forward.isHidden = viewModel.answerCount.value == 1 |
| | | case .lesson3: |
| | | let m = data as! ListenNewModel |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count / 6)" |
| | | btn_forward.isHidden = viewModel.currentPage.value == 0 |
| | | let page = viewModel.currentPage.value + 1 |
| | | // label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count / 6)" |
| | | btn_forward.isHidden = currentPage == 0 |
| | | let page = currentPage + 1 |
| | | maxPage = page |
| | | |
| | | let correctNum = m.list.filter({$0.status == 2}).count //正确 |
| | | let ratio = Double(correctNum) / Double(m.list.count) * 100.0 |
| | | let ratioStr = ratio.jq_formatFloat |
| | | label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\(m.subjectList.flatMap({$0}).count)\n正确率:\(ratioStr)%" |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.count)\n正确率:\(ratioStr)%" |
| | | |
| | | case .lesson2,.lesson5: |
| | | case .lesson2: |
| | | let m = data as! ListenNewModel |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count)" |
| | | // label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count)" |
| | | btn_forward.isHidden = viewModel.currentPage.value == 0 |
| | | let page = viewModel.currentPage.value + 1 |
| | | let page = currentPage + 1 |
| | | maxPage = page |
| | | |
| | | let correctNum = m.list.filter({$0.status == 2}).count //正确 |
| | | let ratio = Double(correctNum) / Double(m.list.count) * 100.0 |
| | | let ratioStr = ratio.jq_formatFloat |
| | | label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\(m.subjectList.flatMap({$0}).count)\n正确率:\(ratioStr)%" |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.count)\n正确率:\(ratioStr)%" |
| | | |
| | | case .lesson5: |
| | | let m = data as! ListenNewModel |
| | | // label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count)" |
| | | btn_forward.isHidden = viewModel.currentPage.value == 0 |
| | | let page = currentPage + 1 |
| | | maxPage = page |
| | | |
| | | let correctNum = m.list.filter({$0.status == 2}).count //正确 |
| | | let ratio = Double(correctNum) / Double(m.list.count) * 100.0 |
| | | let ratioStr = ratio.jq_formatFloat |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.count)\n正确率:\(ratioStr)%" |
| | | |
| | | case .lesson4: |
| | | let m = data as! ListenNewModel |
| | | //两题为一组:需要/2 |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(m.subjectList.count)" |
| | | let page = viewModel.currentPage.value + 1 |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(m.subjectList.count)" |
| | | let page = currentPage + 1 |
| | | // maxPage = max(page,maxPage) |
| | | maxPage = page |
| | | |
| | | let correctNum = m.list.filter({$0.status == 2}).count //正确 |
| | | let ratio = Double(correctNum) / Double(m.list.count) * 100.0 |
| | | let ratioStr = ratio.jq_formatFloat |
| | | label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\(m.subjectList.flatMap({$0}).count)\n正确率:\(ratioStr)%" |
| | | label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\(m.subjectList.count)\n正确率:\(ratioStr)%" |
| | | case .game1,.game2: |
| | | btn_forward.isHidden = true |
| | | label_pageNum.isHidden = true |
| | |
| | | } |
| | | case .story1: |
| | | if viewModel.listenType.value == .story2{ |
| | | btn_next.isHidden = (viewModel.currentPage.value + 1) == viewModel.maxPage.value |
| | | btn_next.isHidden = (currentPage + 1) == viewModel.maxPage.value |
| | | if btn_next.isHidden{ |
| | | btn_exit.setTitle("完成", for: .normal) |
| | | } |
| | |
| | | case .story2: |
| | | let count = (data as! Listen1Model).storyList.count |
| | | viewModel.maxPage.accept(count) |
| | | label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(count)" |
| | | label_pageNum.text = "已完成:\(currentPage + 1)/\(count)" |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @objc func beforeAction(){ |
| | | guard let currentPage = viewModel.currentPage.value else {return} |
| | | |
| | | listenFightLine = .before |
| | | let beforePage = max(0, viewModel.currentPage.value - 1) |
| | | let beforePage = max(0, currentPage - 1) |
| | | switch viewModel.listenType.value { |
| | | case .lesson1: |
| | | if !(pageVC.currentController as! HomeListenFight_lesson_1_VC).isListen{ |
| | |
| | | |
| | | if viewModel.listenType.value == .lesson1{ |
| | | let currentVC = pageVC.currentController as! HomeListenFight_lesson_1_VC |
| | | // if (viewModel.answerCount.value - 1 ) % 4 != 0 || viewModel.answerCount.value <= 4{ |
| | | currentVC.tobefore();return |
| | | // } |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson3{ |
| | |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | |
| | | viewModel.currentPage.accept(currentPage) |
| | | if listenFightLine == .before{ |
| | | restore() |
| | | } |
| | |
| | | |
| | | extension HomeListenFightVC:UICollectionViewDelegate{ |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | guard pageVC.currentPage != indexPath.row else {return} |
| | | if let m = data as? ListenNewModel{ |
| | | guard m.list[indexPath.row].status != 1 else{return} |
| | | guard pageVC.currentPage != indexPath.row else {return} |
| | | if viewModel.listenType.value == .lesson1{ |
| | | guard pages[indexPath.row].filter({$0.status == 2}).count == 4 else {return} |
| | | }else{ |
| | | guard m.list[indexPath.row].status != 1 else{return} |
| | | } |
| | | |
| | | pageVC.scroll(toPage: indexPath.row, animation: true) |
| | | //todo |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension HomeListenFightVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | if let m = data as? ListenNewModel{ |
| | | if data is ListenNewModel{ |
| | | if viewModel.listenType.value == .lesson1{ |
| | | return pages.count |
| | | return (data as! ListenNewModel).subjectList.count |
| | | } |
| | | |
| | | if viewModel.listenType.value == .lesson2{ |
| | | return (data as! ListenNewModel).subjectList.count |
| | | } |
| | | |
| | | return pages.count |
| | | } |
| | | return 0 |
| | |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CardItemCCell", for: indexPath) as! CardItemCCell |
| | | if let m = data as? ListenNewModel{ |
| | | if data is ListenNewModel{ |
| | | let model = pages[indexPath.row] |
| | | cell.titleL.text = "\(indexPath.row + 1)" |
| | | |