杨锴
2025-06-04 ac84f81ca2311300b431c1bfb9f71253b59073f2
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -10,348 +10,391 @@
import RxRelay
class FightAnswerViewModel{
            var selectIndex = BehaviorRelay<IndexPath?>(value: nil)
            var answerType = BehaviorRelay<Fight_lessonType>(value: .none)
    var selectIndex = BehaviorRelay<IndexPath?>(value: nil)
    var answerType = BehaviorRelay<Fight_lessonType>(value: .none)
}
/// 题目类型一
class HomeListenFight_lesson_1_VC: BaseVC {
            private var viewModel = FightAnswerViewModel()
            private var listenNewModel:ListenNewModel!
            private var randomElement:Listen1SubModel?
            private var page:Int!
            private(set) var isListen:Bool = false
            private var isAnsterComplete:Bool = false //是否已经回答完成[小题]
            private var isAnsterDone:Bool = false //是否已经回答完成[大题]
    private var viewModel = FightAnswerViewModel()
    private var listenNewModel:ListenNewModel!
    private var randomElement:Listen1SubModel?
    private var page:Int!
    private(set) var isListen:Bool = false
    private var isAnsterComplete:Bool = false //是否已经回答完成[小题]
    private var isAnsterDone:Bool = false //是否已经回答完成[大题]
            private var isAnsterModel = [Listen1SubModel]()
            private var menuView:VoiceHandleView?
    private var isAnsterModel = [Listen1SubModel]()
            private lazy var collectionView:UICollectionView = {
                        let flowLayout = UICollectionViewFlowLayout()
                        let w = (JQ_ScreenW - 194 * 2 - 25) / 2
                        flowLayout.itemSize = CGSize(width: w, height: w * 0.745)
                        flowLayout.minimumLineSpacing = 25
                        flowLayout.minimumInteritemSpacing = 25
                        flowLayout.scrollDirection = .vertical
                        let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
                        collection.register(UINib(nibName: "ListenFight_lesson_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_1_CCell")
                        collection.isScrollEnabled = false
                        return collection
            }()
    //已回答过的题
    private var answerList = [Listen1SubModel]()
            var rootViewModel:HomeListenFightViewModel!
            var teamScheduleModel:TeamScheduleModel?{
                        didSet{
                                    if let m = teamScheduleModel{
                                                var temp = [Listen1SubModel]()
                                                for v in listenNewModel.subjectList[page]{
                                                            //已回答
                                                            if m.topicIds.contains(v.id){
                                                                        temp.append(v)
                                                            }
                                                }
                                                isAnsterModel.insert(contentsOf: temp, at: 0)
    private var menuView:VoiceHandleView?
    private var handleClouse:(()->Void)?
                                                //todo
//                                                let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page]
//                                                weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id)
    private lazy var collectionView:UICollectionView = {
        let flowLayout = UICollectionViewFlowLayout()
        let w = (JQ_ScreenW - 194 * 2 - 25) / 2
        flowLayout.itemSize = CGSize(width: w, height: w * 0.745)
        flowLayout.minimumLineSpacing = 25
        flowLayout.minimumInteritemSpacing = 25
        flowLayout.scrollDirection = .vertical
        let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
        collection.register(UINib(nibName: "ListenFight_lesson_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_1_CCell")
        collection.isScrollEnabled = false
        return collection
    }()
    var rootViewModel:HomeListenFightViewModel!
    var teamScheduleModel:TeamScheduleModel?{
        didSet{
            if let m = teamScheduleModel{
                var temp = [Listen1SubModel]()
                for v in listenNewModel.subjectList[page]{
                    //已回答
                    if m.topicIds.contains(v.id){
                        temp.append(v)
                    }
                }
                isAnsterModel.insert(contentsOf: temp, at: 0)
            }
        }
    }
    required init(page:Int,listenNewModel:ListenNewModel){
        super.init(nibName: nil, bundle: nil)
        self.page = page
        self.listenNewModel = listenNewModel
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.titleView = UIView()
        collectionView.reloadData()
        print("加载======DidLoad")
        //回传记录,始终保持答题进度
//        if let team = teamScheduleModel{
//            let v = team.schedule - 1
//            for i in 0..<v{
//                isAnsterModel.append(listenNewModel.subjectList[page][i])
//            }
//        }
        //制造随机
        //        listenNewModel.subjectList[page].shuffle()
        getNextAnswer(isFirst: true)
        menuView?.listenType = .lesson1
        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
            VoicePlayer.share().playerAt(url: self.randomElement?.correct)
            self.menuView?.playing()
        }
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        VoicePlayer.share().delegate = self
    }
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        VoicePlayer.share().delegate = nil
        VoicePlayer.share().playerInterrupt()
    }
    func restore(){
        teamScheduleModel?.topicIds.removeAll()
        teamScheduleModel?.teamIds.removeAll()
        answerList.removeAll()
        rootViewModel.currentPage.accept(0)
        rootViewModel.answerCount.accept(1)
        isAnsterDone = false
        isAnsterModel.removeAll()
        isAnsterComplete = false
        viewModel.answerType.accept(.none)
        viewModel.selectIndex.accept(nil)
        menuView?.resetView()
        setUI()
        collectionView.reloadData()
        getNextAnswer(isFirst: true)
    }
                                    }
                        }
            }
    func tobefore(){
        if isAnsterModel.count == 1{return}
            required init(page:Int,listenNewModel:ListenNewModel){
                        super.init(nibName: nil, bundle: nil)
                        self.page = page
                        self.listenNewModel = listenNewModel
            }
        isAnsterModel.removeLast()
            required init?(coder: NSCoder) {
                        fatalError("init(coder:) has not been implemented")
            }
        rootViewModel.answerCount.accept(page + isAnsterModel.count)
            override func viewDidLoad() {
                        super.viewDidLoad()
                        navigationItem.titleView = UIView()
                        collectionView.reloadData()
                        print("加载======DidLoad")
        randomElement = isAnsterModel.last
        menuView?.playUrl = randomElement?.correct
        VoicePlayer.share().playerAt(url: self.randomElement?.correct)
        menuView?.playing()
                        //回传记录,始终保持答题进度
                        if let team = teamScheduleModel{
                                    let v = team.schedule - 1
                                    for i in 0..<v{
                                                isAnsterModel.append(listenNewModel.subjectList[page][i])
                                    }
                        }
        //        listenNewModel.subjectList[page].shuffle()
        collectionView.reloadData()
    }
                        //制造随机
                        listenNewModel.subjectList[page].shuffle()
                        getNextAnswer(isFirst: true)
                        menuView?.listenType = .lesson1
    /// 下一题
    /// - Parameter isFirst: 是否首次进入,首次页码不+1
    private func getNextAnswer(isFirst:Bool = false){
        isListen = false
        if isAnsterModel.count == 4{
                        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                    VoicePlayer.share().playerAt(url: self.randomElement?.correct)
                                    self.menuView?.playing()
                        }
            DispatchQueue.main.asyncAfter(deadline: .now()+2){[weak self] in
                guard let weakSelf = self else { return }
                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                weakSelf.viewModel.answerType.accept(.none)
                weakSelf.viewModel.selectIndex.accept(nil)
                weakSelf.isListen = false
                let v = weakSelf.rootViewModel.answerCount.value
                weakSelf.rootViewModel.answerCount.accept(v + 1)
            }
            return
        }
        randomElement = listenNewModel.subjectList[page].randomElement() //随机抽题
        if randomElement != nil{
            //如果已经回答,或标记为已回答(返回上一小题时)
            if isAnsterModel.contains(randomElement!){
                answerList.append(randomElement!)
                getNextAnswer();return
            }
            //没有回答
            if !isAnsterModel.contains(randomElement!){
                isAnsterModel.append(randomElement!)
            }
        }
        menuView?.playUrl = randomElement?.correct
        //        listenNewModel.subjectList[page].shuffle()
        isAnsterComplete = false
        viewModel.answerType.accept(.none)
        setUI()
        //自动播放下一题语音
        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
            VoicePlayer.share().playerAt(url: self.randomElement?.correct)
            self.menuView?.playing()
        }
        if !isAnsterDone && isAnsterModel.count <= 4 && !isFirst{
            let v = rootViewModel.answerCount.value
            rootViewModel.answerCount.accept(v + 1)
        }
    }
    override func setUI() {
        super.setUI()
        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)
                make.right.equalTo(-194)
                make.bottom.equalToSuperview()
            }
        }
        if menuView == nil{
            menuView = VoiceHandleView()
            view.addSubview(menuView!)
            menuView?.snp.makeConstraints { make in
                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                make.centerX.equalToSuperview()
                //                                                make.height.equalTo(52)
                make.height.equalTo(40)
                //                make.width.equalTo(159)
                make.width.equalTo(189)
            }
        }else{
            menuView?.snp.remakeConstraints { make in
                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                make.centerX.equalToSuperview()
                //                                                make.height.equalTo(52)
                make.height.equalTo(40)
                //                                                make.width.equalTo(159)
                make.width.equalTo(189)
            }
        }
        collectionView.reloadData()
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
        let w = (self.collectionView.size.width - flowLayout.minimumLineSpacing) / 2
        let h = (self.collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2
        if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{
            flowLayout.itemSize = CGSize(width: w, height: h)
            collectionView.reloadData()
        }
    }
    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.cellForItem(at: index) as? ListenFight_lesson_1_CCell{
                var answer:Fight_lessonType = .none
                if self?.randomElement?.id == weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id{
                    answer = .success
                    self?.randomElement?.isAnster = true
                    self?.isListen = false
                    if self?.isAnsterComplete == false{
                        self?.rootViewModel.correctNum += 1
                    }
                    self?.isAnsterComplete = true
                    VoicePlayer.share().playSuccessVoice()
                    let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page]
                    weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id)
                    var cin = 0
                    for (ci,v) in weakSelf.listenNewModel.subjectList[weakSelf.page].enumerated(){
                        if v.id == self?.randomElement?.id{
                            cin = ci;break
                        }
                    }
                    if weakSelf.page >= 1{cin += 4}
                    let model = weakSelf.listenNewModel.list[cin]
                    model.status = 2
                    Services.answerQuestion(id: model.id, status: 2).subscribe(onNext: {_ in
                        weakSelf.handleClouse?()
                    }).disposed(by: weakSelf.disposeBag)
                    DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                        VoicePlayer.share().playerAt(url: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].correct)
                    }
                }else{
                    answer = .fail
                    VoicePlayer.share().playFailVoice()
                    self?.isListen = false
                    if self?.isAnsterComplete == false{
                        self?.rootViewModel.errorNum += 1
                    }
                    var cin = 0
                    for (ci,v) in weakSelf.listenNewModel.subjectList[weakSelf.page].enumerated(){
                        if v.id == self?.randomElement?.id{
                            cin = ci;break
                        }
                    }
                    if weakSelf.page >= 1{cin += 4}
                    let model = weakSelf.listenNewModel.list[cin]
                    model.status = 3
                    Services.answerQuestion(id: model.id, status: 3).subscribe(onNext: {_ in
                        weakSelf.handleClouse?()
                    }).disposed(by: weakSelf.disposeBag)
                }
                switch answer {
                case .success:
                    self?.viewModel.answerType.accept(.success)
                    self?.answerSuccess(cell)
                case .fail:
                    self?.viewModel.answerType.accept(.fail)
                    self?.collectionView.reloadData()
                default:break
                }
            }
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(ResetLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self]_ in
            self?.restore()
            self?.viewDidLoad()
        }).disposed(by: disposeBag)
    }
            }
    //回答正确
    private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){
        menuView?.snp.removeConstraints()
        menuView?.playing()
        menuView?.jq_cornerRadius = 0
        let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
        UIView.animate(withDuration: 0.3) {
            self.menuView?.snp.updateConstraints { make in
                make.top.equalTo(self.view).offset(v.origin.y)
                make.left.equalToSuperview().offset(v.origin.x)
                make.width.equalTo(v.size.width - 10)
                make.height.equalTo(40)
            }
            self.view.layoutIfNeeded()
        }completion: { _ in
            self.collectionView.reloadData()
        }
    }
            override func viewDidAppear(_ animated: Bool) {
                        super.viewDidAppear(animated)
                        VoicePlayer.share().delegate = self
            }
            override func viewDidDisappear(_ animated: Bool) {
                        super.viewDidDisappear(animated)
                        VoicePlayer.share().delegate = nil
                        VoicePlayer.share().playerInterrupt()
            }
            func restore(){
                        isAnsterDone = false
                        isAnsterModel.removeAll()
                        isAnsterComplete = false
                        viewModel.answerType.accept(.none)
                        viewModel.selectIndex.accept(nil)
                        menuView?.resetView()
                        setUI()
                        collectionView.reloadData()
                        getNextAnswer(isFirst: true)
            }
            func tobefore(){
                        if isAnsterModel.count == 1{return}
                        isAnsterModel.removeLast()
                        rootViewModel.answerCount.accept(page + isAnsterModel.count)
                        randomElement = isAnsterModel.last
                        menuView?.playUrl = randomElement?.correct
                        VoicePlayer.share().playerAt(url: self.randomElement?.correct)
                        menuView?.playing()
                        listenNewModel.subjectList[page].shuffle()
                        collectionView.reloadData()
            }
            /// 下一题
            /// - Parameter isFirst: 是否首次进入,首次页码不+1
            private func getNextAnswer(isFirst:Bool = false){
                        isListen = false
                        if isAnsterModel.count == 4{
                                    DispatchQueue.main.asyncAfter(deadline: .now()+3){[weak self] in
                                                guard let weakSelf = self else { return }
                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                                                weakSelf.viewModel.answerType.accept(.none)
                                                weakSelf.viewModel.selectIndex.accept(nil)
                                                weakSelf.isListen = false
                                                let v = weakSelf.rootViewModel.answerCount.value
                                                weakSelf.rootViewModel.answerCount.accept(v + 1)
                                    }
                                    return
                        }
                        randomElement = listenNewModel.subjectList[page].randomElement() //随机抽题
                        if randomElement != nil{
                                    //如果已经回答,或标记为已回答(返回上一小题时)
                                    if isAnsterModel.contains(randomElement!){
                                                getNextAnswer();return
                                    }
                                    //没有回答
                                    if !isAnsterModel.contains(randomElement!){
                                                isAnsterModel.append(randomElement!)
                                    }
                        }
                        menuView?.playUrl = randomElement?.correct
                        listenNewModel.subjectList[page].shuffle()
                        isAnsterComplete = false
                        viewModel.answerType.accept(.none)
                        collectionView.reloadData()
                        setUI()
                        //自动播放下一题语音
                        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                    VoicePlayer.share().playerAt(url: self.randomElement?.correct)
                                    self.menuView?.playing()
                        }
                        if !isAnsterDone && isAnsterModel.count <= 4 && !isFirst{
                                    let v = rootViewModel.answerCount.value
                                    rootViewModel.answerCount.accept(v + 1)
                        }
            }
            override func setUI() {
                        super.setUI()
                        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)
                                                make.right.equalTo(-194)
                                                make.bottom.equalToSuperview()
                                    }
                        }
                        if menuView == nil{
                                    menuView = VoiceHandleView()
                                    view.addSubview(menuView!)
                                    menuView?.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(52)
                                                make.width.equalTo(159)
                                    }
                        }else{
                                    menuView?.snp.remakeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(52)
                                                make.width.equalTo(159)
                                    }
                        }
                        collectionView.reloadData()
            }
            override func viewDidLayoutSubviews() {
                        super.viewDidLayoutSubviews()
                        let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
                        let w = (self.collectionView.size.width - flowLayout.minimumLineSpacing) / 2
                        let h = (self.collectionView.size.height - flowLayout.minimumInteritemSpacing) / 2
                        if flowLayout.itemSize.width != w || flowLayout.itemSize.height != h{
                                    flowLayout.itemSize = CGSize(width: w, height: h)
                                    collectionView.reloadData()
                        }
            }
            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 == weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id{
                                                            answer = .success
                                                            self?.randomElement?.isAnster = true
                                                            self?.isListen = false
                                                            if self?.isAnsterComplete == false{
                                                                        self?.rootViewModel.correctNum += 1
                                                            }
                                                            self?.isAnsterComplete = true
                                                            VoicePlayer.share().playSuccessVoice()
                                                            let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page]
                                                            weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].id)
                                                            DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                                                        VoicePlayer.share().playerAt(url: weakSelf.listenNewModel.subjectList[weakSelf.page][index.row].correct)
                                                            }
                                                }else{
                                                            answer = .fail
                                                            VoicePlayer.share().playFailVoice()
                                                            self?.isListen = false
                                                            if self?.isAnsterComplete == false{
                                                                        self?.rootViewModel.errorNum += 1
                                                            }
                                                }
                                                switch answer {
                                                            case .success:
                                                                        self?.viewModel.answerType.accept(.success)
                                                                        self?.answerSuccess(cell)
                                                            case .fail:
                                                                        self?.viewModel.answerType.accept(.fail)
                                                                        self?.collectionView.reloadData()
                                                            default:break
                                                }
                                    }
                        }).disposed(by: disposeBag)
            }
            //回答正确
            private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){
                        menuView?.snp.removeConstraints()
                        menuView?.playing()
                        menuView?.jq_cornerRadius = 0
                        let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
                        UIView.animate(withDuration: 0.3) {
                                    self.menuView?.snp.updateConstraints { make in
                                                make.top.equalTo(self.view).offset(v.origin.y + UIDevice.jq_safeEdges.top + 101 + 50)
                                                make.left.equalToSuperview().offset(v.origin.x + 194)
                                                make.width.equalTo(v.size.width - 10)
                                                make.height.equalTo(40)
                                    }
                                    self.view.layoutIfNeeded()
                        }completion: { _ in
                                    self.collectionView.reloadData()
                        }
            }
    func handleClouseAction(clouse:@escaping ()->Void){
        self.handleClouse = clouse
    }
}
extension HomeListenFight_lesson_1_VC:UICollectionViewDelegate{
            func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                        if !isListen{
                                    alertError(msg: "请先听题");return
                        }
                        viewModel.selectIndex.accept(indexPath)
            }
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if !isListen{
            alertError(msg: "请先听题");return
        }
        viewModel.selectIndex.accept(indexPath)
    }
}
extension HomeListenFight_lesson_1_VC:UICollectionViewDataSource{
            func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as! ListenFight_lesson_1_CCell
                        cell.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 5, radius: 5, offset: CGSize(width: 0, height: 1), opacity: 1)
                        cell.backgroundColor = .white
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as! ListenFight_lesson_1_CCell
        cell.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 5, radius: 5, offset: CGSize(width: 0, height: 1), opacity: 1)
        cell.backgroundColor = .white
                        if viewModel.selectIndex.value == indexPath{
                                    cell.setState(state: viewModel.answerType.value)
                        }else{
                                    cell.setState(state: .none)
                        }
                        cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
                        return cell
            }
        if viewModel.selectIndex.value == indexPath{
            cell.setState(state: viewModel.answerType.value)
        }else{
            cell.setState(state: .none)
        }
        cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
        return cell
    }
            func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                        return listenNewModel.subjectList[page].count
            }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return listenNewModel.subjectList[page].count
    }
}
extension HomeListenFight_lesson_1_VC:VoicePlayerDelegate{
            func playing() {
                        isListen = false
                        self.view.isUserInteractionEnabled = false
            }
    func playing() {
        isListen = false
        self.view.isUserInteractionEnabled = false
    }
            func playComplete() {
                        isListen = true
                        self.view.isUserInteractionEnabled = true
                        self.menuView?.resetView()
    func playComplete() {
        isListen = true
        self.view.isUserInteractionEnabled = true
        self.menuView?.resetView()
                        if isAnsterComplete{
                                    getNextAnswer()
                        }
            }
        if isAnsterComplete{
            getNextAnswer()
        }
    }
}