无故事王国
8 天以前 41aa6375f4086c3bbabd00c710c0734b25962d78
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)"