杨锴
2025-06-04 ac84f81ca2311300b431c1bfb9f71253b59073f2
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -9,383 +9,435 @@
import QMUIKit
class HomeListenFight_lesson_2_VC: BaseVC {
            private var viewModel = FightAnswerViewModel()
            private var listenNewModel:ListenNewModel!
            private var page:Int!
            var rootViewModel:HomeListenFightViewModel!
            var teamScheduleModel:TeamScheduleModel?
            private var tempViews = [StudyHandleView]()
            private var playedIndex = Set<Int>() //已经播放过的view
            private var voicePlayer = VoicePlayer.share()
            private var isAnsterModel = Set<Listen1SubModel>()
    private var viewModel = FightAnswerViewModel()
    private var listenNewModel:ListenNewModel!
    private var page:Int!
    var rootViewModel:HomeListenFightViewModel!
    var teamScheduleModel:TeamScheduleModel?
    private var tempViews = [StudyHandleView]()
    private var playedIndex = Set<Int>() //已经播放过的view
    private var voicePlayer = VoicePlayer.share()
    private var isAnsterModel = Set<Listen1SubModel>()
    private var isOpen:Bool = false //是否展示标题文本
            private lazy var stackView:UIStackView = {
                        let stackView = UIStackView()
                        stackView.spacing = 78
                        stackView.distribution = .equalSpacing
                        return stackView
            }()
            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
            }()
            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()
    private var studieds = 0
    private var handleClouse:(()->Void)?
    private lazy var stackView:UIStackView = {
        let stackView = UIStackView()
        stackView.spacing = 78
        stackView.distribution = .equalSpacing
        return stackView
    }()
    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
    }()
    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()
        Services.getIsOpen().subscribe(onNext: {data in
            self.isOpen = data.data ?? false
            self.collectionView.reloadData()
        }).disposed(by: disposeBag)
                        //回传记录,始终保持答题进度
                        if let team = teamScheduleModel{
                                    for teamId in team.teamIds{
                                                for v in listenNewModel.subjectList[page]{
                                                            if team.topicIds.contains(v.id){
                                                                        rootViewModel.insertCorrectAnswer(teamId: "\(teamId)", answerId: v.id)
                                                            }
                                                }
                                    }
                        }
            }
            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(){
                        playedIndex.removeAll()
                        tempViews.removeAll()
                        for subView in view.subviews{
                                    if subView is StudyHandleView{
                                                subView.removeFromSuperview()
                                    }
                        }
                        setUI()
                        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 setUI() {
                        super.setUI()
                        viewModel.selectIndex.accept(IndexPath(row: 0, section: 0))
                        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 !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()
                                    make.height.equalTo(52)
                                    make.width.greaterThanOrEqualTo(100)
                        }
                        addStackView()
            }
            private func addStackView(){
                        for subV in stackView.arrangedSubviews{
                                    subV.removeFromSuperview()
                        }
                        tempViews.removeAll()
                        for index in 0...2{
                                    let handleView = StudyHandleView.jq_loadNibView()
                                    handleView.listenType = .lesson2
                                    handleView.view_choose.alpha = 0
                                    handleView.btn_choose.tag = 10 + index
                                    handleView.tag = 20 + index
                                    let row = viewModel.selectIndex.value!.row
                                    let model = listenNewModel.subjectList[page][row]
                                    if index == 0{
                                                handleView.vioceSoundUrl = model.correct
                                    }
                                    if index == 1{
                                                handleView.vioceSoundUrl = model.error.components(separatedBy: ",").first
                                    }
                                    if index == 2{
                                                handleView.vioceSoundUrl = model.error.components(separatedBy: ",").last
                                    }
                                    handleView.playAt {[weak self] index in
                                                self?.playedIndex.insert(index)
                                    }
                                    handleView.chooseClouse {[weak self] btn in
                                                guard let weakSelf = self else { return }
                                                if weakSelf.playedIndex.count != 3{
                                                            handleView.btn_choose.isSelected = false
                                                            alertError(msg: "请听完");return
                                                }
                                                handleView.view_choose.alpha = 1
                                                var lessionType:Fight_lessonType = .none
                                                if handleView.vioceSoundUrl == weakSelf.listenNewModel.subjectList[weakSelf.page][row].correct{
                                                            lessionType = .success
                                                            weakSelf.voicePlayer.playSuccessVoice()
                                                            let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page]
                                                            let answerId = weakSelf.listenNewModel.subjectList[weakSelf.page][row].id
                                                            weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: answerId)
                                                }else{
                                                            lessionType = .fail
                                                            // 重置按钮至最初样式
                                                            weakSelf.playedIndex.removeAll()
                                                            for sub in weakSelf.stackView.arrangedSubviews as! [StudyHandleView]{
                                                                        sub.btn_pay.isEnabled = true
                                                                        sub.btn_choose.isEnabled = true
                                                                        sub.resetView()
                                                                        sub.view_choose.alpha = 0
                                                            }
                                                            weakSelf.voicePlayer.playFailVoice()
                                                }
                                                switch lessionType {
                                                            case .success:
                                                                        weakSelf.rootViewModel.correctNum += 1
                                                                        handleView.btn_choose.isEnabled = false
                                                                        handleView.btn_state.setImage(UIImage(named: "icon_success_small"), for: .normal)
                                                                        UIView.animate(withDuration: 0.5) {
                                                                                    handleView.btn_state.alpha = 1
                                                                        }
                                                                        let i = ceil(handleView.x / 300).int
                                                                        if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: self!.viewModel.selectIndex.value!) as? ListenFight_lesson_1_CCell{
                                                                                    self?.viewModel.answerType.accept(.success)
                                                                                    self?.answerSuccess(cell,index: i)
                                                                        }
                                                            case .fail:
                                                                        weakSelf.rootViewModel.errorNum += 1
                                                                        handleView.btn_state.setImage(UIImage(named: "icon_waring_small"), for: .normal)
                                                                        UIView.animate(withDuration: 0.5) {
                                                                                    handleView.btn_state.alpha = 1
                                                                        }
                                                                        UIView.animate(withDuration: 0.5, delay: 1.2, options: .layoutSubviews) {
                                                                                    handleView.btn_pay.alpha = 1
                                                                                    handleView.btn_voice.alpha = 1
                                                                                    handleView.btn_state.alpha = 0
                                                                        } completion: { _ in
                                                                                    handleView.btn_choose.isSelected = false
                                                                        }
                                                            default:
                                                                        handleView.btn_state.setImage(nil, for: .normal)
                                                }
                                    }
                                    handleView.snp.makeConstraints { make in
                                                make.height.equalTo(52)
                                                make.width.greaterThanOrEqualTo(221)
                                    }
                                    tempViews.append(handleView)
                        }
                        tempViews.shuffle() //乱序
                        stackView.addArrangedSubviews(tempViews)
            }
            private func answerSuccess(_ cell:ListenFight_lesson_1_CCell,index:Int){
                        let studyHandleView = stackView.arrangedSubviews[index] as! StudyHandleView
                        let bounds = studyHandleView.convert(studyHandleView.bounds, to: self.view)
                        //copy试图放在上面进行覆盖
                        let copyHandleView = studyHandleView.copyView()
                        copyHandleView.view_choose.isHidden = true
                        copyHandleView.listenType = .lesson2
                        copyHandleView.isplaying()
                        copyHandleView.vioceSoundUrl = listenNewModel.subjectList[page][self.viewModel.selectIndex.value!.row].correct
                        copyHandleView.jq_cornerRadius = 0
                        view.addSubview(copyHandleView)
                        view.layoutIfNeeded()
                        copyHandleView.snp.makeConstraints { make in
                                    make.top.equalToSuperview().offset(bounds.origin.y)
                                    make.left.equalToSuperview().offset(bounds.origin.x)
                                    make.width.equalTo(159)
                                    make.height.equalTo(52)
                        }
                        view.layoutIfNeeded()
                        let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
                        UIView.animate(withDuration: 0.6) {
                                    copyHandleView.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: { complete in
                                    if complete{
                                                self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][self.viewModel.selectIndex.value!.row].correct)
                                    }
                        }
            }
            private func resetStackView(){
                        playedIndex.removeAll()
                        let newRow = viewModel.selectIndex.value!.row+1
                        if newRow >= listenNewModel.subjectList[page].count{ //防止坐标越界
                                    NotificationCenter.default.post(name: NextLession_Noti, object: nil);return
                        }
                        collectionView.reloadData()
                        viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0))
                        addStackView()
            }
            override func setRx() {}
        //回传记录,始终保持答题进度
        if let team = teamScheduleModel{
            for teamId in team.teamIds{
                for v in listenNewModel.subjectList[page]{
                    if team.topicIds.contains(v.id){
                        rootViewModel.insertCorrectAnswer(teamId: "\(teamId)", answerId: v.id)
                    }
                }
            }
        }
    }
    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(){
        playedIndex.removeAll()
        tempViews.removeAll()
        for subView in view.subviews{
            if subView is StudyHandleView{
                subView.removeFromSuperview()
            }
        }
        setUI()
        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 setUI() {
        super.setUI()
        viewModel.selectIndex.accept(IndexPath(row: 0, section: 0))
        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 !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()
            make.height.equalTo(40)
            make.width.greaterThanOrEqualTo(125)
        }
        addStackView()
    }
    private func addStackView(){
        for subV in stackView.arrangedSubviews{
            subV.removeFromSuperview()
        }
        tempViews.removeAll()
        for index in 0...2{
            let handleView = StudyHandleView.jq_loadNibView()
            handleView.listenType = .lesson2
            handleView.view_choose.alpha = 0
            handleView.btn_choose.tag = 10 + index
            handleView.tag = 20 + index
            let row = viewModel.selectIndex.value!.row
            let model = listenNewModel.subjectList[page][row]
            if index == 0{
                handleView.vioceSoundUrl = model.correct
            }
            if index == 1{
                handleView.vioceSoundUrl = model.error.components(separatedBy: ",").first
            }
            if index == 2{
                handleView.vioceSoundUrl = model.error.components(separatedBy: ",").last
            }
            handleView.playAt {[weak self] index in
                self?.playedIndex.insert(index)
            }
            handleView.chooseClouse {[weak self] btn in
                guard let weakSelf = self else { return }
                if weakSelf.playedIndex.count < 3{
                    handleView.btn_choose.isSelected = false
                    alertError(msg: "请听完");return
                }
                handleView.view_choose.alpha = 1
                var lessionType:Fight_lessonType = .none
                if handleView.vioceSoundUrl == weakSelf.listenNewModel.subjectList[weakSelf.page][row].correct{
                    lessionType = .success
                    weakSelf.voicePlayer.playSuccessVoice()
                    let teamId = weakSelf.listenNewModel.data?.id.components(separatedBy: ",")[weakSelf.page]
                    let answerId = weakSelf.listenNewModel.subjectList[weakSelf.page][row].id
                    weakSelf.rootViewModel.insertCorrectAnswer(teamId: teamId, answerId: answerId)
                }else{
                    lessionType = .fail
                    // 重置按钮至最初样式
                    weakSelf.playedIndex.removeAll()
                    for sub in weakSelf.stackView.arrangedSubviews as! [StudyHandleView]{
                        sub.btn_pay.isEnabled = true
                        sub.btn_choose.isEnabled = true
                        sub.resetView()
                        sub.view_choose.alpha = 0
                    }
                    weakSelf.voicePlayer.playFailVoice()
                }
                switch lessionType {
                case .success:
                    weakSelf.rootViewModel.correctNum += 1
                    handleView.btn_choose.isEnabled = false
                    handleView.btn_state.setImage(UIImage(named: "icon_success_small"), for: .normal)
                    UIView.animate(withDuration: 0.5) {
                        handleView.btn_state.alpha = 1
                    }
                    let i = ceil(handleView.x / 300).int
                    if let cell = self?.collectionView.cellForItem(at: self!.viewModel.selectIndex.value!) as? ListenFight_lesson_1_CCell{
                        self?.viewModel.answerType.accept(.success)
                        self?.answerSuccess(cell,index: i)
                        if let data = self?.listenNewModel.list[self!.page]{
                            Services.answerQuestion(id: data.id, status: 2).subscribe(onNext: {_ in
                                self?.handleClouse?()
                            }).disposed(by: weakSelf.disposeBag)
                        }
                    }
                case .fail:
                    weakSelf.rootViewModel.errorNum += 1
                    handleView.btn_state.setImage(UIImage(named: "icon_waring_small"), for: .normal)
                    UIView.animate(withDuration: 0.5) {
                        handleView.btn_state.alpha = 1
                    }
                    UIView.animate(withDuration: 0.5, delay: 1.2, options: .layoutSubviews) {
                        handleView.btn_pay.alpha = 1
                        handleView.btn_voice.alpha = 1
                        handleView.btn_state.alpha = 0
                    } completion: { _ in
                        handleView.btn_choose.isSelected = false
                    }
                    if let data = self?.listenNewModel.list[self!.page]{
                        Services.answerQuestion(id: data.id, status: 3).subscribe(onNext: {_ in
                            self?.handleClouse?()
                        }).disposed(by: weakSelf.disposeBag)
                    }
                default:
                    handleView.btn_state.setImage(nil, for: .normal)
                }
            }
            handleView.snp.makeConstraints { make in
                make.height.equalTo(52)
                make.width.greaterThanOrEqualTo(221)
            }
            tempViews.append(handleView)
        }
        tempViews.shuffle() //乱序
        stackView.addArrangedSubviews(tempViews)
        DispatchQueue.main.asyncAfter(deadline: .now()+1) {
            let temp = self.tempViews.first
            temp?.isplaying()
            self.voicePlayer.playerAt(url: temp?.vioceSoundUrl ?? "")
            self.playedIndex.insert(0)
            self.collectionView.reloadData()
        }
    }
    private func answerSuccess(_ cell:ListenFight_lesson_1_CCell,index:Int){
        studieds += 1
        let studyHandleView = stackView.arrangedSubviews[index] as! StudyHandleView
        let bounds = studyHandleView.convert(studyHandleView.bounds, to: self.view)
        //copy试图放在上面进行覆盖
        let copyHandleView = studyHandleView.copyView()
        copyHandleView.view_choose.isHidden = true
        copyHandleView.listenType = .lesson2
        copyHandleView.isplaying()
        copyHandleView.vioceSoundUrl = listenNewModel.subjectList[page][self.viewModel.selectIndex.value!.row].correct
        copyHandleView.jq_cornerRadius = 0
        view.addSubview(copyHandleView)
        view.layoutIfNeeded()
        copyHandleView.snp.makeConstraints { make in
            make.top.equalToSuperview().offset(bounds.origin.y)
            make.left.equalToSuperview().offset(bounds.origin.x)
            make.width.equalTo(159)
            make.height.equalTo(52)
        }
        view.layoutIfNeeded()
        let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
        UIView.animate(withDuration: 0.6) {
            copyHandleView.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: { complete in
            if complete{
                self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][self.viewModel.selectIndex.value!.row].correct)
            }
        }
    }
    private func resetStackView(){
        playedIndex.removeAll()
        let newRow = viewModel.selectIndex.value!.row+1
        if newRow >= listenNewModel.subjectList[page].count{ //防止坐标越界
            NotificationCenter.default.post(name: NextLession_Noti, object: nil);return
        }
        collectionView.reloadData()
        viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0))
        addStackView()
    }
    override func setRx() {
        NotificationCenter.default.rx.notification(ResetLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self]_ in
            self?.restore()
            self?.viewDidLoad()
        }).disposed(by: disposeBag)
    }
    func handleClouseAction(clouse:@escaping ()->Void){
        self.handleClouse = clouse
    }
}
extension HomeListenFight_lesson_2_VC:UICollectionViewDelegate{
            func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                        viewModel.selectIndex.accept(indexPath)
            }
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        viewModel.selectIndex.accept(indexPath)
    }
}
extension HomeListenFight_lesson_2_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
            if viewModel.selectIndex.value?.row == indexPath.row && isOpen{
                cell.label_title.isHidden = false
            }else{
                cell.label_title.isHidden = true
            }
                        cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
                        cell.label_title.text = listenNewModel.subjectList[page][indexPath.row].name
                        return cell
            }
            func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                        return listenNewModel.subjectList[page].count
            }
    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)
        if indexPath.row == studieds{
            cell.backgroundColor = .orange
        }else{
            cell.backgroundColor = .white
        }
        //            if viewModel.selectIndex.value?.row == indexPath.row && isOpen{
        //                cell.label_title.isHidden = false
        //            }else{
        cell.label_title.isHidden = true
        //            }
        cell.setListen1SubModel(listenNewModel.subjectList[page][indexPath.row])
        cell.label_title.text = listenNewModel.subjectList[page][indexPath.row].name
        return cell
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return listenNewModel.subjectList[page].count
    }
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }
}
extension HomeListenFight_lesson_2_VC:VoicePlayerDelegate{
            func playing() {
                        view.isUserInteractionEnabled = false
                        print("正在播放")
                        //正在播放中,其他播放按钮先禁止
                        for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                                    sub.btn_pay.isEnabled = false
                                    sub.btn_choose.isEnabled = false
                        }
            }
            func playComplete() {
                        view.isUserInteractionEnabled = true
                        //对已经播放过的View,进行刷新
                        for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                                    sub.btn_pay.isEnabled = true
                                    sub.btn_choose.isEnabled = true
                                    if playedIndex.contains(sub.tag){
                                                sub.resetView()
                                                sub.view_choose.alpha = playedIndex.contains(sub.tag) ? 1:0
                                    }
                        }
                        for sub in view.subviews{
                                    if let v = sub as? StudyHandleView{
                                                v.resetView()
                                    }
                        }
                        if viewModel.answerType.value == .success{
                                    let v = rootViewModel.answerCount.value
                                    rootViewModel.answerCount.accept(v + 1)
                                    viewModel.answerType.accept(.none)
                                    for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                                                sub.btn_pay.isEnabled = false
                                                sub.btn_choose.isEnabled = false
                                    }
                                    DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                                self.resetStackView()
                                    }
                        }
            }
    func playing() {
        view.isUserInteractionEnabled = false
        print("正在播放")
        //正在播放中,其他播放按钮先禁止
        for sub in stackView.arrangedSubviews as! [StudyHandleView]{
            sub.btn_pay.isEnabled = false
            sub.btn_choose.isEnabled = false
        }
    }
    func playComplete() {
        collectionView.reloadData()
        view.isUserInteractionEnabled = true
        //对已经播放过的View,进行刷新
        for sub in stackView.arrangedSubviews as! [StudyHandleView]{
            sub.btn_pay.isEnabled = true
            sub.btn_choose.isEnabled = true
            if playedIndex.contains(sub.tag){
                sub.resetView()
                sub.view_choose.alpha = playedIndex.contains(sub.tag) ? 1:0
            }
        }
        for sub in view.subviews{
            if let v = sub as? StudyHandleView{
                v.resetView()
            }
        }
        for v in tempViews{
            if v.isplayend{
                v.resetView()
            }
        }
        for (i,v) in tempViews.enumerated(){
            if v.isplayend == false{
                self.playedIndex.insert(i)
                v.isplaying()
                voicePlayer.playerAt(url: v.vioceSoundUrl)
                break
            }
        }
        if viewModel.answerType.value == .success{
            let v = rootViewModel.answerCount.value
            rootViewModel.answerCount.accept(v + 1)
            viewModel.answerType.accept(.none)
            for sub in stackView.arrangedSubviews as! [StudyHandleView]{
                sub.btn_pay.isEnabled = false
                sub.btn_choose.isEnabled = false
            }
            DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                self.resetStackView()
            }
        }
    }
}