From ee4954eb4dc84e0a6c0a784da717f9cc648b106b Mon Sep 17 00:00:00 2001
From: 无故事王国 <841720330@qq.com>
Date: 星期三, 19 六月 2024 16:37:16 +0800
Subject: [PATCH] fix

---
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift              |  116 ++++++++++---------
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift             |   11 +
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift                  |    2 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift                |   23 +++
 DolphinEnglishLearnStudent/Info.plist                                                   |   11 +
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift                |   15 +-
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift            |   19 ++
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift              |   28 ++--
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib                  |    3 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift |   13 +
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift      |   77 ++++++++++--
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift      |    1 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift      |    4 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift             |   16 ++
 DolphinEnglishLearnStudent/Models/CommonModel.swift                                     |    1 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib              |    8 +
 DolphinEnglishLearnStudent/Services/Services.swift                                      |    4 
 DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift                |    1 
 DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift      |    6 
 19 files changed, 251 insertions(+), 108 deletions(-)

diff --git a/DolphinEnglishLearnStudent/Info.plist b/DolphinEnglishLearnStudent/Info.plist
index c0ae0b4..c68961a 100644
--- a/DolphinEnglishLearnStudent/Info.plist
+++ b/DolphinEnglishLearnStudent/Info.plist
@@ -2,6 +2,17 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>dolpinEnglish</string>
+			</array>
+		</dict>
+	</array>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>
diff --git a/DolphinEnglishLearnStudent/Models/CommonModel.swift b/DolphinEnglishLearnStudent/Models/CommonModel.swift
index 5d57ffd..934de98 100644
--- a/DolphinEnglishLearnStudent/Models/CommonModel.swift
+++ b/DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -364,6 +364,7 @@
 				var userId: Int = 0
 				var week: Int = 0
 				var weekStudy: Int = 0
+				var gameDifficulty:Int = 0
 }
 
 class SimpleListenDataModel:HandyJSON,Hashable{
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
index 67eb3c7..145baf7 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -38,6 +38,7 @@
 								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
 				}()
 
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
index 432a7f2..9407dea 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
@@ -6,6 +6,7 @@
 //
 
 import UIKit
+import JQTools
 
 class ListenFight_Game_Pocket_CCell: UICollectionViewCell {
 
@@ -100,7 +101,7 @@
 								layoutIfNeeded()
 				}
 
-				private func cellPlaying(){
+				func cellPlaying(){
 								img2.isHidden = false
 								img1.isHidden = true
 								playBtn.isHidden = true
@@ -130,15 +131,17 @@
 								fatalError("init(coder:) has not been implemented")
 				}
 
-				@objc func toFromAction(){
+				@objc func toFromAction(_ superView:UIView? = nil){
+								superView?.isUserInteractionEnabled = false
 								UIView.transition(from: mask_img, to: answer_img, duration: 0.6, options: [.transitionFlipFromLeft,.showHideTransitionViews]) { _ in
-
+												superView?.isUserInteractionEnabled = true
 								}
 				}
 
-				@objc func toBackAction(){
+				@objc func toBackAction(_ superView:UIView? = nil){
+								superView?.isUserInteractionEnabled = false
 								UIView.transition(from: answer_img, to: mask_img, duration: 0.6,options: [.transitionFlipFromRight,.showHideTransitionViews]){ _ in
-
+												superView?.isUserInteractionEnabled = true
 								}
 				}
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
index 3ffdb54..65014de 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -191,8 +191,8 @@
 				}
 
 
-				private func showGameLevel(){
-								ChooseLevelView.show {[weak self] level in
+				private func showGameLevel(canLevel:Int){
+								ChooseLevelView.show(canLevel: canLevel) {[weak self] level in
 												guard let weakSelf = self else { return }
 												weakSelf.viewModel.gameLevel.accept(level)
 												Services.gameHearing(difficulty: level, quarter: weakSelf.viewModel.quarter.value!, week: weakSelf.viewModel.week.value!).subscribe(onNext: {result in
@@ -202,10 +202,10 @@
 																								weakSelf.pageVC.reloadData()
 																				}
 																}
-												},onError: { _ in
-																weakSelf.showGameLevel()
+												},onError: {[weak self] _ in
+																self?.navigationController?.popViewController(animated: true)
 												}).disposed(by: weakSelf.disposeBag)
-								} cancelClouse: {[weak self] in
+								} cancelClouse: { [weak self] in
 												self?.navigationController?.popViewController(animated: true)
 								}
 				}
@@ -251,9 +251,8 @@
 												var asComplete:Bool = false
 												switch weakSelf.viewModel.listenType.value {
 																case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:asComplete = nextPage >= (weakSelf.data as! ListenNewModel).subjectList.count
+																case .game1,.game2:asComplete = true
 																case .story1,.story2: asComplete = nextPage >= (weakSelf.data as! Listen1Model).storyList.count
-
-																default:break
 												}
 
 												if asComplete{
@@ -309,7 +308,7 @@
 																label_pageNum.isHidden = true
 
 																if viewModel.listenType.value == .game1{
-																				showGameLevel()
+																				showGameLevel(canLevel: studyScheduleModel?.gameDifficulty ?? 0)
 																}
 												case .story1,.story2:
 																let count = (data as! Listen1Model).storyList.count
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
index 2bf4ac3..2118546 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -36,6 +36,7 @@
 								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
 				}()
 
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift
index d4b9238..7745dea 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift
@@ -20,6 +20,7 @@
 								let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
 								collection.register(UINib(nibName: "ListenFight_lesson_3_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_3_CCell")
 								collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header")
+								collection.isScrollEnabled = false
 								return collection
 				}()
 
@@ -151,6 +152,8 @@
 
 				@objc private func chooseAnswerAction(btn:UIButton){
 
+								guard viewModel.selectIndex != nil else {return}
+
 								if !islisten{
 												alertError(msg: "请先听题");return
 								}
@@ -225,6 +228,7 @@
 																}
 
 																guard ansterIndePath != nil else {return}
+																self.viewModel.selectIndex.accept(nil)
 
 																if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_3_CCell", for: ansterIndePath!) as? ListenFight_lesson_3_CCell{
 																				var newFrame = cell.img_cover.convert(cell.img_cover.bounds, to: self.view)
@@ -235,10 +239,8 @@
 																				} completion: { _ in
 																								self.answterCount += 1
 																								self.voicePlayer.playerAt(url: self.listenNewModel.subjectList[self.page][valueIndex].correct)
-
 																								DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
 																												self.setAnswerStackView()
-																												self.viewModel.selectIndex.accept(nil)
 																												let v = self.rootViewModel.answerCount.value + 1
 																												self.rootViewModel.answerCount.accept(v)
 																												self.collectionView.reloadData()
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
index e98b8eb..98b453e 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
@@ -17,7 +17,9 @@
 
 				private var answerIndex:IndexPath? //答案的Index
 				private var answerCount:Int = 0 //回答计数
+				private var answerIndexs = Set<IndexPath>() //回答过的Index集合
 				private var filterItems = [[Listen1SubModel]]() //此类型特殊,需要数据清理
+//				private var isPlayedAnsterSet = Set<Int>() //已经播放了的
 
 				private lazy var stackView:UIStackView = {
 								let sta = UIStackView()
@@ -37,6 +39,7 @@
 								collection.contentInset = UIEdgeInsets(top: 33, left: 0, bottom: 0, right: 0)
 								collection.register(UINib(nibName: "ListenFight_lesson_4_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_4_CCell")
 								collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header")
+								collection.isScrollEnabled = false
 								return collection
 				}()
 
@@ -58,7 +61,7 @@
 				}
 
 				func restore(){
-
+								answerIndexs.removeAll()
 								answerCount = 0
 								answerIndex = nil
 								for subView in view.subviews{
@@ -142,12 +145,18 @@
 								for i in 0...2{
 												let answerView = Lesson_4_AnswerView.jq_loadNibView()
 												answerView.btn_choose.tag = 10 + i
+												answerView.tag = 20 + i
 												answerView.voiceUrl = tempVoiceArray[i]
+												answerView.btn_isAnswer.setImage(viewModel.selectIndex.value?.row == 1 ? UIImage(named: "icon_question"):UIImage(named: "icon_answer"), for: .normal)
 												answerView.btn_choose.addTarget(self, action: #selector(answerAction), for: .touchUpInside)
 												answerView.alpha = 0
 												answerView.snp.makeConstraints { make in
 																make.width.equalTo(221)
 																make.height.equalTo(52)
+												}
+												answerView.btn_choose.isEnabled = false
+												answerView.playAt { index in
+																answerView.btn_choose.isEnabled = true
 												}
 
 												UIView.animate(withDuration: 0.05 + Double(i)) {
@@ -159,6 +168,17 @@
 				}
 
 				@objc func answerAction(btn:UIButton){
+
+								var islistenDone:Int = 0
+								for v in stackView.arrangedSubviews as! [Lesson_4_AnswerView]{
+												if v.btn_choose.isEnabled == true{
+																islistenDone += 1
+												}
+								}
+
+								if islistenDone != 3{
+												alertError(msg: "请先听完");return
+								}
 
 								guard let selectIndex = viewModel.selectIndex.value else{
 												alertError(msg: "请先听题");return
@@ -186,16 +206,25 @@
 								if tempSubV?.voiceUrl == answerModel?.correct{
 												answerType = .success
 												voicePlayer.playSuccessVoice()
-												answerCount += 1
-												rootViewModel.correctNum += 1
-												let v = rootViewModel.answerCount.value + 1
-												rootViewModel.answerCount.accept(v)
+												DispatchQueue.main.asyncAfter(deadline: .now()+2) {
+																self.voicePlayer.playerAt(url: tempSubV!.voiceUrl)
+												}
+
+												//防止重复答题造成计数错误的问题
+												if !answerIndexs.contains(answerIndex!){
+																answerCount += 1
+																rootViewModel.correctNum += 1
+																let v = rootViewModel.answerCount.value + 1
+																rootViewModel.answerCount.accept(v)
+												}
+
 								}else{
 												answerType = .fail
 												voicePlayer.playFailVoice()
 												rootViewModel.errorNum += 1
 								}
 								voicePlayer.playerEnd()
+								answerIndexs.insert(answerIndex!)
 
 								switch answerType {
 												case .success:
@@ -203,8 +232,12 @@
 																				if let copyView = tempSubV?.copyView(){
 																								tempSubV?.alpha = 0
 																								let newRect = tempSubV!.view_handle.convert(tempSubV!.bounds, to: self.view)
-																								copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 152, height: 52))
+																								copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 159, height: 52))
 																								copyView.view_state.isHidden = true
+																								copyView.isCopy = true
+																								copyView.btn_isAnswer.setImage(self.viewModel.selectIndex.value?.row == 1 ? UIImage(named: "icon_question"):UIImage(named: "icon_answer"), for: .normal)
+																								copyView.img_play.alpha = 1
+																								copyView.voiceUrl = tempSubV!.voiceUrl
 																								self.view.addSubview(copyView)
 																								self.view.layoutIfNeeded()
 
@@ -216,7 +249,7 @@
 
 																												self.collectionView.reloadData()
 																												UIView.animate(withDuration: 0.4) {
-																																copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: 152, height: 52))
+																																copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: 159, height: 52))
 																												} completion: { _ in
 																																self.viewModel.selectIndex.accept(nil)
 																																for v in self.stackView.subviews{
@@ -225,7 +258,7 @@
 																																self.stackView.layoutIfNeeded()
 
 																																//回答完成,下一答题
-																																if self.answerCount == 2{
+																																if self.answerIndexs.count == 2{
 																																				let v = self.rootViewModel.answerCount.value + 1
 																																				self.rootViewModel.answerCount.accept(v)
 																																				self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page]
@@ -254,9 +287,7 @@
 }
 
 extension HomeListenFight_lesson_4_VC:UICollectionViewDelegate{
-				func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-//								viewModel.selectIndex.accept(indexPath)
-				}
+
 }
 
 extension HomeListenFight_lesson_4_VC:UICollectionViewDelegateFlowLayout{
@@ -296,14 +327,32 @@
 												cell.img_state.alpha = 0
 												cell.img_state.transform = .init(scaleX: 0.1, y: 0.1)
 								}
+
+								if indexPath.row == 1{
+												cell.btn_handle.setImage(UIImage(named: "icon_answer"), for: .normal)
+												cell.view_handle.isHidden = true
+								}else{
+												cell.btn_handle.setImage(UIImage(named: "icon_question"), for: .normal)
+												cell.view_handle.isHidden = true
+								}
+								
 								//问题
 								if filterItems[indexPath.section][indexPath.row].isQuestion == 0{
-												cell.btn_handle.setImage(UIImage(named: "icon_question"), for: .normal)
 												cell.view_handle.isHidden = true
 								}else{
 												cell.view_handle.isHidden = false
 								}
 								cell.setModel(m)
+
+
+								if answerIndexs.count == 0 && indexPath.section == 1{
+												cell.view_handle.backgroundColor = .gray.withAlphaComponent(0.5)
+												cell.btn_play.isEnabled = false
+								}else{
+												cell.view_handle.backgroundColor = UIColor(hexString: "#41A2EB")
+												cell.btn_play.isEnabled = true
+								}
+
 								return cell
 				}
 
@@ -324,10 +373,10 @@
 
 extension HomeListenFight_lesson_4_VC:VoicePlayerDelegate{
 				func playComplete() {
-
+								self.view.isUserInteractionEnabled = true
 				}
 				
 				func playing() {
-
+								self.view.isUserInteractionEnabled = false
 				}
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
index edefa6e..c9ecc86 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
@@ -29,6 +29,7 @@
 								let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
 								collection.register(UINib(nibName: "ListenFight_lesson_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_1_CCell")
 								collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header")
+								collection.isScrollEnabled = false
 								return collection
 				}()
 
@@ -303,6 +304,7 @@
 
 extension HomeListenFight_lesson_5_VC:VoicePlayerDelegate{
 				func playComplete() {
+								view.isUserInteractionEnabled = true
 								isListen = true
 								for subV in stackView.arrangedSubviews as! [VoiceHandleView]{
 												subV.resetView()
@@ -324,7 +326,7 @@
 				}
 				
 				func playing() {
-
+								view.isUserInteractionEnabled = false
 				}
 
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
index 79b74c8..ce2bfb4 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
@@ -53,6 +53,7 @@
 								let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
 								collection.contentInset = UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 35)
 								collection.register(UINib(nibName: "ListenFight_Game_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_Game_CCell")
+								collection.isScrollEnabled = false
 								return collection
 				}()
 
@@ -94,10 +95,6 @@
 
     override func viewDidLoad() {
         super.viewDidLoad()
-
-								#if DEBUG
-								listen1Model?.data?.time = 60
-								#endif
 
 								if  listen1Model != nil{
 												times = listen1Model?.data?.time ?? 10
@@ -197,15 +194,17 @@
 												totalCount += 1
 												rootViewModel.errorNum += 1
 												label_class.text = "\(totalCount)"
-
-												//答题完成
-												if self.answerSet.count == 0{completeQuestion()}
+								}
+								//答题完成
+								if self.answerSet.count == 0{
+												timer?.invalidate()
+												completeQuestion()
 								}
 				}
 
 				private func answerQuestion(){
 								view.layoutIfNeeded()
-
+								view.isUserInteractionEnabled = false
 								guard let row = viewModel.selectIndex.value?.row else { alertError(msg: "请选择");return  }
 
 								var answerType:Fight_lessonType = .none
@@ -221,7 +220,6 @@
 												case .success:
 																viewModel.answerType.accept(.success)
 																collectionView.reloadData()
-																rootViewModel.correctNum += 1
 																if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: viewModel.selectIndex.value!) as? ListenFight_Game_CCell{
 																				let newRect = cell.contentView.convert(cell.bounds, from: self.collectionView)
 																				let x = abs(newRect.origin.x) + self.collectionView.contentInset.left + 5
@@ -238,9 +236,9 @@
 																												self.voicePlayer.playerAt(url: self.currentAnswer?.correct)
 																												self.timer?.fireDate = .distantFuture
 																												//答题完成
-																												if self.answerSet.count == 0{
-																																self.completeQuestion()
-																												}
+//																												if self.answerSet.count == 0{
+//																																self.completeQuestion()
+//																												}
 																								}
 																				}
 																}
@@ -298,6 +296,7 @@
 
 extension HomeListenGame_1_VC:VoicePlayerDelegate{
 				func playComplete() {
+								view.isUserInteractionEnabled = true
 								view_studyHandleView.resetView()
 
 								if viewModel.answerType.value == .success{
@@ -317,9 +316,14 @@
 																self.timer?.fireDate = .distantPast
 												}
 								}
+
+
+								//答题完成
+								if self.answerSet.count == 0{completeQuestion()}
 				}
 				
 				func playing() {
+								view.isUserInteractionEnabled = false
 								view_studyHandleView.playing()
 				}
 
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
index fcfbd10..a070c70 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
@@ -43,6 +43,7 @@
 								let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
 								collection.contentInset = UIEdgeInsets(top: 101, left: 40, bottom: 0, right: 40)
 								collection.register(ListenFight_Game_Pocket_CCell.self, forCellWithReuseIdentifier: "_ListenFight_Game_Pocket_CCell")
+								collection.isScrollEnabled = false
 								return collection
 				}()
 
@@ -148,38 +149,60 @@
 								}
 				}
 
+				//判断检查两个Cell情况
+				private func checking(){
 
-				private func nextQuesAction(){
+								guard selectModels.count == 2 else {return}
 
-				}
+								let firstM = selectModels.first
+								let lastM = selectModels.last
 
-				private func answerQuestion(){
-								view.layoutIfNeeded()
-								var answerType:Fight_lessonType = .none
-								answerType = .success
 
-								switch answerType {
-												case .success:
-																voicePlayer.playSuccessVoice()
+								if firstM != nil && lastM != nil{
+												if firstM!.model.id == lastM!.model.id{
+																firstM!.model.isOpen = true
+																lastM?.model.isOpen = true
+																selectModels.removeAll()
+																print("相同")
 																viewModel.answerType.accept(.success)
-																collectionView.reloadData()
-
-												case .fail:
-																voicePlayer.playFailVoice()
+																rootViewModel.correctNum += 1
+																voicePlayer.playSuccessVoice()
+																self.selectModels.removeAll()
+												}else{
+																print("不相同")
 																viewModel.answerType.accept(.fail)
-																collectionView.reloadData()
-																DispatchQueue.main.asyncAfter(wallDeadline: .now()+2.5) {
-																				self.viewModel.answerType.accept(.none)
-																				self.collectionView.reloadData()
+																rootViewModel.errorNum += 1
+																let firstIndex = firstM!.indexPath
+																let secondIndex = lastM!.indexPath
+																voicePlayer.playFailVoice()
+
+																let firstIndexCell = self.collectionView.cellForItem(at: firstIndex!) as! ListenFight_Game_Pocket_CCell
+																let secondIndexCell = self.collectionView.cellForItem(at: secondIndex!) as! ListenFight_Game_Pocket_CCell
+																self.view.isUserInteractionEnabled = false
+																DispatchQueue.main.asyncAfter(deadline: .now()+3.0){
+																				firstIndexCell.toBackAction(self.view)
+																				secondIndexCell.toBackAction(self.view)
+																				self.selectModels.removeAll()
 																}
-												case .none:
-																break
+												}
 								}
+
+								let surplusListCount = datas.filter({$0.isOpen == false}).count
+								if surplusListCount == 0{
+												NotificationCenter.default.post(name: NextLession_Noti, object: ["gameId":listen1Model.data!.id,"gameIntegral":listen1Model.data!.integral])
+												rootViewModel.answerItems[0] = self.listen1Model
+												timer?.invalidate()
+								}
+								print("剩余:\(surplusListCount)")
 				}
 }
 
 extension HomeListenGame_2_VC:UICollectionViewDelegate{
 				func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
+
+								if voicePlayer.isPlaying{
+												print("正在播放语音");return
+								}
 
 								if datas[indexPath.row].isOpen{
 												print("已经展开过了");return
@@ -201,48 +224,26 @@
 
 								if selectModels.count == 1{
 												let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell
-												cell.toFromAction()
+												cell.toFromAction(self.view)
+
+												if model.type == 2{
+																//播放
+																cell.cellPlaying()
+																voicePlayer.playerAt(url: model.voice)
+												}
 								}
 
 								if selectModels.count == 2{
 												let cell = self.collectionView.cellForItem(at: indexPath) as! ListenFight_Game_Pocket_CCell
-												cell.toFromAction()
+												cell.toFromAction(self.view)
 
-												let firstM = selectModels.first
-												let lastM = selectModels.last
-
-												if firstM != nil && lastM != nil{
-																if firstM!.model.id == lastM!.model.id{
-																				firstM!.model.isOpen = true
-																				lastM?.model.isOpen = true
-																				selectModels.removeAll()
-																				print("相同")
-																				rootViewModel.correctNum += 1
-																}else{
-																				print("不相同")
-																				rootViewModel.errorNum += 1
-																				let firstIndex = firstM!.indexPath
-																				let secondIndex = lastM!.indexPath
-
-																				let firstIndexCell = self.collectionView.cellForItem(at: firstIndex!) as! ListenFight_Game_Pocket_CCell
-																				let secondIndexCell = self.collectionView.cellForItem(at: secondIndex!) as! ListenFight_Game_Pocket_CCell
-
-																				DispatchQueue.main.asyncAfter(deadline: .now()+0.5){
-																								firstIndexCell.toBackAction()
-																								secondIndexCell.toBackAction()
-																								self.selectModels.removeAll()
-																				}
-																}
+												if model.type == 2{
+																//语音先播放,再评估
+																cell.cellPlaying()
+																voicePlayer.playerAt(url: model.voice)
+																return
 												}
-
-												let surplusListCount = datas.filter({$0.isOpen == false}).count
-												if surplusListCount == 0{
-																NotificationCenter.default.post(name: NextLession_Noti, object: ["gameId":listen1Model.data!.id,"gameIntegral":listen1Model.data!.answerIntegral])
-																rootViewModel.answerItems[0] = self.listen1Model
-																timer?.invalidate()
-												}
-												print("剩余:\(surplusListCount)")
-
+												checking()
 								}
 				}
 }
@@ -301,14 +302,17 @@
 
 extension HomeListenGame_2_VC:VoicePlayerDelegate{
 				func playComplete() {
+								view.isUserInteractionEnabled = true
+								//正在播放的语音Cell要归位
 								if let index = currentPayCellIndex{
 												let cell = collectionView.cellForItem(at: index) as! ListenFight_Game_Pocket_CCell
 												cell.cellResotePay()
 								}
+								checking()
 				}
 
 				func playing() {
-								
+								view.isUserInteractionEnabled = false
 				}
 
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift
index d1e0594..1af9ce1 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift
@@ -66,6 +66,7 @@
 								viewModel.selectIndex.accept(IndexPath(row: 0, section: 0))
 								collectionView.delegate = self
 								collectionView.dataSource = self
+								collectionView.isScrollEnabled = false
 								collectionView.showsVerticalScrollIndicator = false
 								collectionView.backgroundColor = .clear
 								collectionView.jq_addShadows(shadowColor: UIColor.black.withAlphaComponent(0.1), corner: 8, radius: 10, offset: CGSize(width: 0, height: 2), opacity: 1)
@@ -103,6 +104,10 @@
 												handleView.tag = 20 + index
 												handleView.chooseClouse {[weak self] btn in
 																guard let weakSelf = self else { return }
+																if weakSelf.isPlayedSet.count != 3{
+																				handleView.btn_choose.isSelected = false
+																				alertError(msg: "请听完");return
+																}
 
 																var lessionType:Fight_lessonType = .none
 																if weakSelf.listen1Model.storyList[weakSelf.page].correct == handleView.vioceSoundUrl{
@@ -226,11 +231,11 @@
 
 extension HomeListenStory_1_VC:VoicePlayerDelegate{
 				func playComplete() {
-
+								view.isUserInteractionEnabled = true
 								if viewModel.answerType.value == .success{
 												DispatchQueue.main.asyncAfter(delay: 3.0) {
 																var dict = Dictionary<String,Any>()
-																dict["storyIntegral"] = self.listen1Model.data?.lookIntegral ?? 0
+																dict["storyIntegral"] = self.listen1Model.data?.integral ?? 0
 																dict["storyId"] = self.listen1Model.data?.id ?? 0
 																NotificationCenter.default.post(name: NextLession_Noti, object: dict)
 												}
@@ -244,6 +249,6 @@
 				}
 
 				func playing() {
-
+								view.isUserInteractionEnabled = false
 				}
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift
index da55616..2a93c60 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift
@@ -47,11 +47,12 @@
 
 				override func viewDidAppear(_ animated: Bool) {
 								super.viewDidAppear(animated)
-
+								voicePlayer.delegate = self
 				}
 
 				override func viewDidDisappear(_ animated: Bool) {
 								super.viewDidDisappear(animated)
+								voicePlayer.delegate = nil
 								voicePlayer.playerInterrupt()
 				}
 
@@ -65,6 +66,7 @@
 								collectionView.showsVerticalScrollIndicator = false
 								collectionView.backgroundColor = .clear
 								collectionView.jq_addShadows(shadowColor: UIColor.black.withAlphaComponent(0.1), corner: 8, radius: 10, offset: CGSize(width: 0, height: 2), opacity: 1)
+								collectionView.isScrollEnabled = false
 								view.addSubview(collectionView)
 								collectionView.snp.makeConstraints { make in
 												make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0)
@@ -129,3 +131,15 @@
 								return 1
 				}
 }
+
+extension HomeListenStory_2_VC:VoicePlayerDelegate{
+				func playComplete() {
+								view.isUserInteractionEnabled = true
+				}
+				
+				func playing() {
+								view.isUserInteractionEnabled = false
+				}
+				
+
+}
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
index bbc6477..23fd00b 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
@@ -72,6 +72,8 @@
 extension HomeListenSubVC:UITableViewDelegate{
 				func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 
+								if page <= 4 && indexPath.section == 0{return}
+
 								let day = page + 1
 
 								if page <= 4{
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
index c4502e3..2a71190 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -13,7 +13,10 @@
 
 				@IBOutlet weak var view_container: UIView!
 				@IBOutlet weak var tackView_level: UIStackView!
-
+				@IBOutlet weak var btn_level3: QMUIButton!
+				@IBOutlet weak var btn_level2: QMUIButton!
+				@IBOutlet weak var btn_level1: QMUIButton!
+				
 				private var clouseLevel:((Int)->Void)!
 				private var cancelClouse:(()->Void)!
 				private var level:Int = 0
@@ -25,7 +28,7 @@
 								layoutIfNeeded()
 				}
 
-				static func show(clouse:@escaping (Int)->Void,cancelClouse:@escaping()->Void){
+				static func show(canLevel:Int,clouse:@escaping (Int)->Void,cancelClouse:@escaping()->Void){
 
 								var needLoad:Bool = true
 								for v in sceneDelegate?.window?.subviews ?? []{
@@ -39,6 +42,22 @@
 								levelView.cancelClouse = cancelClouse
 								sceneDelegate?.window?.addSubview(levelView)
 								levelView.frame = sceneDelegate?.window?.frame ?? .zero
+								levelView.btn_level1.isEnabled = false
+								levelView.btn_level2.isEnabled = false
+								levelView.btn_level3.isEnabled = false
+
+								switch canLevel {
+												case 3:
+																levelView.btn_level3.isEnabled = true
+																fallthrough
+												case 2:
+																levelView.btn_level2.isEnabled = true
+																fallthrough
+												case 1:
+																levelView.btn_level1.isEnabled = true
+												default:
+																levelView.btn_level1.isEnabled = true
+								}
 
 								UIView.animate(withDuration: 0.4) {
 												levelView.transform = .init(scaleX: 1.0, y: 1.0)
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib
index 88dabbb..36bfaf6 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib
@@ -171,6 +171,9 @@
                 <constraint firstItem="x4l-72-4Ul" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="vBn-p9-1pN"/>
             </constraints>
             <connections>
+                <outlet property="btn_level1" destination="90w-7c-Frs" id="rZH-M7-kAS"/>
+                <outlet property="btn_level2" destination="GxK-lP-67f" id="lWd-Ku-ufs"/>
+                <outlet property="btn_level3" destination="JeY-VZ-dhW" id="OKo-fk-5fp"/>
                 <outlet property="tackView_level" destination="5Gu-z5-bpP" id="mpe-aW-FdQ"/>
                 <outlet property="view_container" destination="x4l-72-4Ul" id="twD-2O-23d"/>
             </connections>
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift
index f413c8a..3521739 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift
@@ -14,24 +14,39 @@
 				@IBOutlet weak var btn_choose: UIButton!
 				@IBOutlet weak var view_state: UIView!
 				@IBOutlet weak var view_handle: UIView!
-
+				@IBOutlet weak var btn_isAnswer: UIButton!
+				@IBOutlet weak var img_play: UIImageView!
+				
 				var voiceUrl:String?
+				var isCopy:Bool = false
+				var playAtClouse:((Int)->Void)?
 
 				override func awakeFromNib() {
 								super.awakeFromNib()
 								img_state.alpha = 0
+								img_play.alpha = 0
+								VoicePlayer.share().playEnd {
+												if self.isCopy{
+																self.img_play.alpha = 1
+												}
+								}
 				}
 
-				
 				func copyView()->Lesson_4_AnswerView{
 								let copyV = Lesson_4_AnswerView.jq_loadNibView()
 								copyV.bounds = self.bounds
 								return copyV
 				}
 
+				func playAt(_ clouse:@escaping(Int)->Void){
+								self.playAtClouse = clouse
+				}
+
 				@IBAction func playAction(_ sender: UIButton) {
 								if let url = voiceUrl{
 												VoicePlayer.share().playerAt(url: url)
+												img_play.alpha = 0
+												playAtClouse?(self.tag)
 								}
 				}
 }
diff --git a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib
index 0df0a8b..641b0a3 100644
--- a/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib
+++ b/DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib
@@ -43,14 +43,19 @@
                                         <action selector="playAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="mAa-LF-0SJ"/>
                                     </connections>
                                 </button>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_play" translatesAutoresizingMaskIntoConstraints="NO" id="YeU-8E-35u">
+                                    <rect key="frame" x="102" y="10" width="32" height="32"/>
+                                </imageView>
                             </subviews>
                             <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstItem="mba-RI-50M" firstAttribute="leading" secondItem="otl-1Z-qED" secondAttribute="trailing" constant="19" id="0nx-t9-1zV"/>
+                                <constraint firstItem="YeU-8E-35u" firstAttribute="centerY" secondItem="tfO-7L-o0T" secondAttribute="centerY" id="2DM-IT-SGr"/>
                                 <constraint firstAttribute="width" constant="152" id="3Zx-vg-H2U"/>
                                 <constraint firstItem="otl-1Z-qED" firstAttribute="leading" secondItem="qsr-6I-w3R" secondAttribute="leading" constant="18" id="6CA-c8-Zr7"/>
                                 <constraint firstAttribute="bottom" secondItem="tfO-7L-o0T" secondAttribute="bottom" id="8ro-2n-YNH"/>
                                 <constraint firstAttribute="trailing" secondItem="tfO-7L-o0T" secondAttribute="trailing" id="A2h-po-R4k"/>
+                                <constraint firstAttribute="trailing" secondItem="YeU-8E-35u" secondAttribute="trailing" constant="18" id="DAX-dg-Ase"/>
                                 <constraint firstItem="mba-RI-50M" firstAttribute="centerY" secondItem="otl-1Z-qED" secondAttribute="centerY" id="FTc-eb-PWk"/>
                                 <constraint firstItem="tfO-7L-o0T" firstAttribute="top" secondItem="qsr-6I-w3R" secondAttribute="top" id="HqC-Ia-1OU"/>
                                 <constraint firstItem="mkh-g4-79e" firstAttribute="centerY" secondItem="otl-1Z-qED" secondAttribute="centerY" id="N6f-d4-80e"/>
@@ -95,6 +100,8 @@
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
                 <outlet property="btn_choose" destination="v7f-gv-EWR" id="wFE-Gp-xAd"/>
+                <outlet property="btn_isAnswer" destination="otl-1Z-qED" id="0Fg-A8-9dl"/>
+                <outlet property="img_play" destination="YeU-8E-35u" id="Xvc-ls-0sz"/>
                 <outlet property="img_state" destination="mkh-g4-79e" id="IzD-w8-jjK"/>
                 <outlet property="view_handle" destination="qsr-6I-w3R" id="ptU-09-NIc"/>
                 <outlet property="view_state" destination="Gbs-f8-132" id="Swt-nY-Bpv"/>
@@ -107,6 +114,7 @@
         <image name="btn_radio_u" width="52" height="52"/>
         <image name="icon_answer" width="28" height="14"/>
         <image name="icon_fail" width="80" height="80"/>
+        <image name="icon_play" width="32" height="32"/>
         <image name="icon_play_1" width="27" height="27"/>
     </resources>
 </document>
diff --git a/DolphinEnglishLearnStudent/Services/Services.swift b/DolphinEnglishLearnStudent/Services/Services.swift
index 8f46a4a..af3b91a 100644
--- a/DolphinEnglishLearnStudent/Services/Services.swift
+++ b/DolphinEnglishLearnStudent/Services/Services.swift
@@ -12,8 +12,8 @@
 import JQTools
 
 #if DEBUG
-let All_Url = "http://192.168.110.237:9000"
-//let All_Url = "http://1.95.15.237:9000"
+//let All_Url = "http://192.168.110.237:9000"
+let All_Url = "http://1.95.15.237:9000"
 #else
 let All_Url = "http://1.95.15.237:9000"
 #endif

--
Gitblit v1.7.1