fix
无故事王国
2024-06-13 7c7bb620c2670e316617273ffabe9f690f989ad0
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -18,13 +18,15 @@
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 = {
@@ -39,11 +41,10 @@
                        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) {
@@ -57,8 +58,8 @@
                        print("加载======DidLoad")
                        //制造随机
                        randomElement = listen1Model.subjectList.randomElement()
                        menuView?.playUrl = randomElement?.correct
                        listenNewModel.subjectList[page].shuffle()
                        getNextAnswer()
                        menuView?.listenType = .lesson1
                        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
@@ -80,12 +81,34 @@
            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() {
@@ -127,18 +150,19 @@
            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{
@@ -153,7 +177,7 @@
                                                            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
                                                }
                                    }
@@ -163,7 +187,6 @@
            //回答正确
            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
@@ -204,12 +227,12 @@
                        }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
            }
}
@@ -219,12 +242,28 @@
            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)
                                    }
                        }
            }