无故事王国
2024-06-12 21656936d06a8ea01d8d9ce4fdb1dbe0bb2e8419
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -25,7 +25,7 @@
            private var isListen:Bool = false
            private var isAnsterComplete:Bool = false //是否已经回答完成
            private var menuView:VoiceHandleView!
            private var menuView:VoiceHandleView?
            private lazy var collectionView:UICollectionView = {
                        let flowLayout = UICollectionViewFlowLayout()
@@ -43,6 +43,7 @@
                        super.init(nibName: nil, bundle: nil)
                        self.page = page
                        self.listen1Model = listen1Model
                        self.listen1Model.subjectList.shuffle()
            }
            
            required init?(coder: NSCoder) {
@@ -53,8 +54,17 @@
                        super.viewDidLoad()
                        navigationItem.titleView = UIView()
                        collectionView.reloadData()
                        print("加载======DidLoad")
//                        collectionView.isUserInteractionEnabled = false
                        //制造随机
                        randomElement = listen1Model.subjectList.randomElement()
                        menuView?.playUrl = randomElement?.correct
                        menuView?.listenType = .lesson1
                        DispatchQueue.main.asyncAfter(deadline: .now()+2) {
                                    VoicePlayer.share().playerAt(url: self.randomElement?.correct)
                                    self.menuView?.playing()
                        }
            }
@@ -68,39 +78,56 @@
                        VoicePlayer.share().delegate = nil
            }
            func restore(){
                        isAnsterComplete = false
                        viewModel.answerType.accept(.none)
                        viewModel.selectIndex.accept(nil)
                        menuView?.resetView()
                        setUI()
                        collectionView.reloadData()
            }
            override func setUI() {
                        super.setUI()
                        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(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()
                                    }
                        }
                        menuView = VoiceHandleView()
                        //制造随机
                        randomElement = listen1Model.subjectList.randomElement()
                        menuView.playUrl = randomElement?.correct
                        menuView.listenType = .lesson1
                        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)
                        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 setRx() {
                        viewModel.selectIndex.subscribe(onNext: {[weak self] index in
                                    guard let index = index else { return }
                                    //判断选中是否正确逻辑
                                    if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: index) as? ListenFight_lesson_1_CCell{
                                                var answer:Fight_lessonType = .none
@@ -111,6 +138,7 @@
                                                                        self?.rootViewModel.correctNum += 1
                                                            }
                                                            self?.isAnsterComplete = true
                                                            VoicePlayer.share().playerAt(url: self?.listen1Model.subjectList[index.row].correct)
                                                }else{
                                                            answer = .fail
                                                            if self?.isAnsterComplete == false{
@@ -134,11 +162,11 @@
            //回答正确
            private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){
                        menuView.snp.removeConstraints()
                        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
                                    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)
@@ -147,13 +175,6 @@
                                    self.view.layoutIfNeeded()
                        }completion: { _ in
                                    self.collectionView.reloadData()
                                    DispatchQueue.main.asyncAfter(deadline: .now()+1.2){
                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
//                                                self.collectionView.isUserInteractionEnabled = true
                                                self.viewModel.answerType.accept(.none)
                                                self.viewModel.selectIndex.accept(nil)
                                                self.rootViewModel.answerItems[self.page] = self.listen1Model
                                    }
                        }
            }
@@ -193,8 +214,18 @@
}
extension HomeListenFight_lesson_1_VC:VoicePlayerDelegate{
            func playing() {}
            func playComplete() {
                        isListen = true
                        menuView.resetView()
                        self.menuView?.resetView()
                        if self.isAnsterComplete{
                                    DispatchQueue.main.asyncAfter(deadline: .now()+3){
                                                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
                                    }
                        }
            }
}