From 41aa6375f4086c3bbabd00c710c0734b25962d78 Mon Sep 17 00:00:00 2001 From: 无故事王国 <841720330@qq.com> Date: 星期日, 27 七月 2025 22:54:38 +0800 Subject: [PATCH] 修复BUG,修改逻辑 --- DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift | 93 +++++++++++++++++++++++++++++++--------------- 1 files changed, 63 insertions(+), 30 deletions(-) diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift index 629a463..54e6296 100644 --- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift +++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift @@ -54,8 +54,7 @@ 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 @@ -247,7 +246,7 @@ 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 @@ -267,13 +266,23 @@ 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) @@ -289,6 +298,7 @@ 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() @@ -434,7 +444,7 @@ 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 @@ -481,6 +491,7 @@ 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) @@ -491,56 +502,69 @@ } 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 @@ -550,7 +574,7 @@ } 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) } @@ -559,7 +583,7 @@ 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)" } } @@ -764,9 +788,10 @@ } @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{ @@ -794,9 +819,7 @@ 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{ @@ -856,6 +879,7 @@ func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { + viewModel.currentPage.accept(currentPage) if listenFightLine == .before{ restore() } @@ -949,21 +973,30 @@ 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 @@ -971,7 +1004,7 @@ 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)" -- Gitblit v1.7.1