无故事王国
2024-06-12 21656936d06a8ea01d8d9ce4fdb1dbe0bb2e8419
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -19,6 +19,7 @@
            private var tempViews = [StudyHandleView]()
            private var playedIndex = Set<Int>() //已经播放过的view
            private var voicePlayer = VoicePlayer.share()
            private lazy var stackView:UIStackView = {
                        let stackView = UIStackView()
@@ -44,6 +45,7 @@
                        super.init(nibName: nil, bundle: nil)
                        self.page = page
                        self.listen1Model = listen1Model
                        self.listen1Model.subjectList.shuffle()
            }
            
            required init?(coder: NSCoder) {
@@ -53,6 +55,29 @@
            override func viewDidLoad() {
                        super.viewDidLoad()
                        navigationItem.titleView = UIView()
            }
            override func viewDidAppear(_ animated: Bool) {
                        super.viewDidAppear(animated)
                        VoicePlayer.share().delegate = self
            }
            override func viewDidDisappear(_ animated: Bool) {
                        super.viewDidDisappear(animated)
                        VoicePlayer.share().delegate = nil
            }
            func restore(){
                        playedIndex.removeAll()
                        tempViews.removeAll()
                        for subView in view.subviews{
                                    if subView is StudyHandleView{
                                                subView.removeFromSuperview()
                                    }
                        }
                        setUI()
                        collectionView.reloadData()
            }
@@ -61,10 +86,13 @@
                        viewModel.selectIndex.accept(IndexPath(row: 0, section: 0))
                        collectionView.delegate = self
                        collectionView.dataSource = self
                        collectionView.backgroundColor = UIColor(hexStr: "#C3BFB3")
                        view.addSubview(collectionView)
                        if !view.subviews.contains(collectionView){
                                    collectionView.delegate = self
                                    collectionView.dataSource = self
                                    collectionView.backgroundColor = UIColor(hexStr: "#C3BFB3")
                                    view.addSubview(collectionView)
                        }
                        collectionView.snp.makeConstraints { make in
                                    make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(101)
                                    make.left.equalTo(194)
@@ -72,7 +100,10 @@
                                    make.bottom.equalToSuperview()
                        }
                        view.addSubview(stackView)
                        if !view.subviews.contains(stackView){
                                    view.addSubview(stackView)
                        }
                        stackView.snp.makeConstraints { make in
                                    make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                                    make.centerX.equalToSuperview()
@@ -81,14 +112,6 @@
                        }
                        addStackView()
                        VoicePlayer.share().playEnd {[weak self] in
                                    //对已经播放过的View,进行刷新
                                    for sub in self!.stackView.arrangedSubviews as! [StudyHandleView]{
                                                if self!.playedIndex.contains(sub.tag){
                                                            sub.resetView()
                                                }
                                    }
                        }
            }
@@ -132,7 +155,7 @@
                                                var lessionType:Fight_lessonType = .none
                                                if handleView.vioceSoundUrl == weakSelf.listen1Model.subjectList[row].correct{
                                                            lessionType = .success
                                                            VoicePlayer.share().playerEnd()
                                                                        weakSelf.voicePlayer.playerEnd()
                                                }else{
                                                            lessionType = .fail
                                                }
@@ -214,42 +237,24 @@
                                    self.view.layoutIfNeeded()
                        }completion: { complete in
                                    if complete{
                                                self.resetStackView()
                                                self.voicePlayer.playerAt(url: self.listen1Model.subjectList[self.viewModel.selectIndex.value!.row].correct)
                                    }
                        }
            }
            private func resetStackView(){
                        let newRow = viewModel.selectIndex.value!.row+1
                        viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0))
                        collectionView.reloadData()
                        if newRow == 4{
                        if newRow == listen1Model.subjectList.count{ //防止坐标越界
                                    rootViewModel.answerItems[page] = listen1Model
                                    NotificationCenter.default.post(name: NextLession_Noti, object: nil);return
                        }
                        collectionView.reloadData()
                        viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0))
                        addStackView()
            }
            override func setRx() {
//                        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)
            }
            override func setRx() {}
}
extension HomeListenFight_lesson_2_VC:UICollectionViewDelegate{
@@ -277,3 +282,25 @@
                        return min(4,listen1Model.subjectList.count)
            }
}
extension HomeListenFight_lesson_2_VC:VoicePlayerDelegate{
            func playing() {}
            func playComplete() {
                        //对已经播放过的View,进行刷新
                        for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                                    if playedIndex.contains(sub.tag){
                                                sub.resetView()
                                    }
                        }
                        print("--->\(page)")
                        if viewModel.answerType.value == .success{
                                    DispatchQueue.main.asyncAfter(deadline: .now()+3) {
                                                self.resetStackView()
                                                self.viewModel.answerType.accept(.none)
                                    }
                        }
            }
}