DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -318,10 +318,14 @@ var updateTime: String = "" //学习类型四专用 var isQuestion:Int = 0 //游戏类型2专用 var isOpen:Bool = false } @available(*,deprecated,message: "废弃") struct Listen4Model:HandyJSON{ var data = [Listen4DataModel]() } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -262,7 +262,8 @@ let nextPage = weakSelf.viewModel.currentPage.value + 1 var asComplete:Bool = false switch weakSelf.viewModel.listenType.value { case .lesson1,.lesson2:asComplete = nextPage >= (weakSelf.data as! ListenNewModel).subjectList.count case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:asComplete = nextPage >= (weakSelf.data as! ListenNewModel).subjectList.count case .story1,.story2: asComplete = nextPage >= (weakSelf.data as! Listen1Model).storyList.count default:break } @@ -283,14 +284,16 @@ return } if weakSelf.viewModel.listenType.value == .story2{ weakSelf.btn_next.isHidden = (nextPage + 1) == weakSelf.viewModel.maxPage.value if weakSelf.btn_next.isHidden{ weakSelf.btn_exit.setTitle("完成", for: .normal) } } //以下无效代码 // if weakSelf.viewModel.listenType.value == .story2{ // weakSelf.btn_next.isHidden = (nextPage + 1) == weakSelf.viewModel.maxPage.value // if weakSelf.btn_next.isHidden{ // weakSelf.btn_exit.setTitle("完成", for: .normal) // } // } // // // //完成 // if nextPage >= weakSelf.viewModel.maxPage.value{ @@ -327,8 +330,11 @@ private func setPages(){ switch viewModel.listenType.value{ case .lesson1,.lesson2,.lesson3: case .lesson1,.lesson2,.lesson3,.lesson5: label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\((data as! ListenNewModel).subjectList.flatMap({$0}).count)" case .lesson4: //两题为一组:需要/2 label_pageNum.text = "已完成:\(viewModel.answerCount.value)/\((data as! ListenNewModel).subjectList.flatMap({$0}).count / 2)" case .game1,.game2: btn_forward.isHidden = true label_pageNum.isHidden = true @@ -339,7 +345,7 @@ case .story1,.story2: let count = (data as! Listen1Model).storyList.count viewModel.maxPage.accept(count) label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(0)" label_pageNum.text = "已完成:\(viewModel.currentPage.value + 1)/\(count)" default:break } } @@ -352,7 +358,7 @@ var ids:String = "" switch viewModel.listenType.value { case .lesson1,.lesson2: case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: let data = (data as! ListenNewModel).data ids = data?.id ?? "" toalIntegral = data?.integral ?? 0 @@ -486,7 +492,9 @@ func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { switch viewModel.listenType.value { case .lesson1,.lesson2,.lesson3:return UInt((data as! ListenNewModel).subjectList.count) case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5:return UInt((data as! ListenNewModel).subjectList.count) case .story1,.story2: return UInt((data as! Listen1Model).storyList.count) default:break } @@ -494,10 +502,6 @@ //超级听力,只有一页 if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{ return 1 } if viewModel.listenType.value == .story1 || viewModel.listenType.value == .story2{ return UInt((data as! Listen1Model).storyList.count) } return UInt(viewModel.maxPage.value) } @@ -550,13 +554,13 @@ } if viewModel.listenType.value == .lesson4{ let vc = HomeListenFight_lesson_4_VC(page: page, listen4Model: data as! Listen4Model) let vc = HomeListenFight_lesson_4_VC(page: page, listenNewModel: data as! ListenNewModel) vc.rootViewModel = viewModel return vc } if viewModel.listenType.value == .lesson5{ let vc = HomeListenFight_lesson_5_VC(page: page, listen1Model: data as! Listen1Model) let vc = HomeListenFight_lesson_5_VC(page: page, listenNewModel: data as! ListenNewModel) vc.rootViewModel = viewModel return vc } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
@@ -11,12 +11,13 @@ private var viewModel = FightAnswerViewModel() private var listen4Model:Listen4Model! private var listenNewModel:ListenNewModel! private var page:Int! var rootViewModel:HomeListenFightViewModel! private var answerIndex:IndexPath? //答案的Index private var answerCount:Int = 0 //回答计数 private var filterItems = [[Listen1SubModel]]() //此类型特殊,需要数据清理 private lazy var stackView:UIStackView = { let sta = UIStackView() @@ -41,11 +42,15 @@ private var voicePlayer = VoicePlayer.share() required init(page:Int,listen4Model:Listen4Model){ required init(page:Int,listenNewModel:ListenNewModel){ super.init(nibName: nil, bundle: nil) self.page = page self.listen4Model = listen4Model self.listen4Model.data.shuffle() self.listenNewModel = listenNewModel let temp1 = Array(listenNewModel.subjectList[page][0...1]) let temp2 = Array(listenNewModel.subjectList[page][2...3]) filterItems.append(temp1) filterItems.append(temp2) } required init?(coder: NSCoder) { @@ -102,7 +107,7 @@ private func setAnswerStackView(){ guard viewModel.selectIndex.value != nil else{ guard let selectIndex = viewModel.selectIndex.value else{ alertError(msg: "请先听题");return } @@ -118,10 +123,11 @@ } } let answerModel = filterItems[selectIndex.section].filter({$0.isQuestion == 0}).first! let answerId = answerModel.id let answerId = listen4Model.data[viewModel.selectIndex.value!.section].subject var tempVoiceArray = [String]() for v in listen4Model.data[viewModel.selectIndex.value!.section].subjectList{ for v in filterItems[selectIndex.section]{ if v.id == answerId{ tempVoiceArray.append(v.correct) tempVoiceArray.append(v.error.components(separatedBy: ",").first ?? "") @@ -152,6 +158,11 @@ } @objc func answerAction(btn:UIButton){ guard let selectIndex = viewModel.selectIndex.value else{ alertError(msg: "请先听题");return } var tempSubV:Lesson_4_AnswerView? for subV in stackView.arrangedSubviews{ @@ -162,8 +173,9 @@ } var answerModel:Listen1SubModel? for (index,v) in (listen4Model.data[viewModel.selectIndex.value!.section].subjectList).enumerated(){ if v.id == listen4Model.data[viewModel.selectIndex.value!.section].subject{ for (index,v) in filterItems[selectIndex.section].enumerated(){ let m = filterItems[selectIndex.section].filter({$0.isQuestion == 0}).first if v.id == m?.id{ answerModel = v answerIndex = IndexPath(row: index, section: viewModel.selectIndex.value!.section) } @@ -174,6 +186,8 @@ answerType = .success answerCount += 1 rootViewModel.correctNum += 1 let v = rootViewModel.answerCount.value + 1 rootViewModel.answerCount.accept(v) }else{ answerType = .fail rootViewModel.errorNum += 1 @@ -209,7 +223,9 @@ //回答完成,下一答题 if self.answerCount == 2{ self.rootViewModel.answerItems[self.page] = self.listen4Model let v = self.rootViewModel.answerCount.value + 1 self.rootViewModel.answerCount.accept(v) self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] self.voicePlayer.playerEnd() NotificationCenter.default.post(name: NextLession_Noti, object: nil) self.voicePlayer.playerEnd() @@ -267,8 +283,7 @@ weakSelf.setAnswerStackView() } } let m = listen4Model.data[indexPath.section].subjectList[indexPath.row] let m = filterItems[indexPath.section][indexPath.row] if indexPath == answerIndex{ UIView.animate(withDuration: 0.4, delay: 0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4,options: .layoutSubviews) { cell.img_state.alpha = 1 @@ -279,7 +294,7 @@ cell.img_state.transform = .init(scaleX: 0.1, y: 0.1) } //问题 if listen4Model.data[indexPath.section].subject == m.id{ if filterItems[indexPath.section][indexPath.row].isQuestion == 0{ cell.btn_handle.setImage(UIImage(named: "icon_question"), for: .normal) cell.view_handle.isHidden = true }else{ @@ -296,11 +311,11 @@ } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return listen4Model.data[section].subjectList.count return filterItems[section].count } func numberOfSections(in collectionView: UICollectionView) -> Int { return listen4Model.data.count return filterItems.count } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
@@ -10,7 +10,7 @@ class HomeListenFight_lesson_5_VC: BaseVC { private var viewModel = FightAnswerViewModel() private var listen1Model:Listen1Model! private var listenNewModel:ListenNewModel! private var page:Int! private var answterCount:Int = 0 //回答计数,用于确定角标 private var playVoiceAt:Int? //播放声音的View @@ -48,11 +48,11 @@ return label }() required init(page:Int,listen1Model:Listen1Model){ required init(page:Int,listenNewModel:ListenNewModel){ super.init(nibName: nil, bundle: nil) self.page = page self.listen1Model = listen1Model self.listen1Model.subjectList.shuffle() self.listenNewModel = listenNewModel // self.listen1Model.subjectList.shuffle() } required init?(coder: NSCoder) { @@ -145,7 +145,7 @@ } var tempArray = [VoiceHandleView]() for (i,value) in listen1Model.subjectList.enumerated(){ for (i,value) in listenNewModel.subjectList[page].enumerated(){ let answerView = VoiceHandleView() answerView.listenType = .lesson5 answerView.tag = 1000+i @@ -172,7 +172,7 @@ private func showHintText(_ state:Bool){ if let at = playVoiceAt{ label_hint.text = listen1Model.subjectList[at].name label_hint.text = listenNewModel.subjectList[page][at].name UIView.animate(withDuration: 0.5) { if state{ self.label_hint.snp.remakeConstraints { make in @@ -202,8 +202,8 @@ viewModel.selectIndex.accept(indexPath) let answer = listen1Model.subjectList[playVoiceAt!] let selectAnswer = listen1Model.subjectList[indexPath.row] let answer = listenNewModel.subjectList[page][playVoiceAt!] let selectAnswer = listenNewModel.subjectList[page][indexPath.row] var answerType:Fight_lessonType = .none @@ -269,7 +269,7 @@ extension HomeListenFight_lesson_5_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let model = listen1Model.subjectList[indexPath.row] let model = listenNewModel.subjectList[page][indexPath.row] 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: 8, radius: 3, offset: CGSize(width: 0, height: 1), opacity: 1) if viewModel.selectIndex.value == indexPath{ @@ -288,7 +288,7 @@ } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return listen1Model.subjectList.count return listenNewModel.subjectList[page].count } func numberOfSections(in collectionView: UICollectionView) -> Int { @@ -303,9 +303,15 @@ subV.resetView() } if viewModel.answerType.value == .success{ let v = rootViewModel.answerCount.value + 1 rootViewModel.answerCount.accept(v) viewModel.answerType.accept(.none) } DispatchQueue.main.asyncAfter(deadline: .now()+0.4) { if self.answterCount >= 4{ self.rootViewModel.answerItems[self.page] = self.listen1Model self.rootViewModel.answerItems[self.page] = self.listenNewModel.subjectList[self.page] self.voicePlayer.playerEnd() NotificationCenter.default.post(name: NextLession_Noti, object: nil) } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
@@ -80,9 +80,15 @@ fatalError("init(coder:) has not been implemented") } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) voicePlayer.delegate = self } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) timer?.invalidate() voicePlayer.delegate = nil voicePlayer.playerEnd() } @@ -111,7 +117,6 @@ } } voicePlayer.delegate = self } override func setUI() { @@ -177,6 +182,7 @@ } @objc private func runloopTime(){ print("进入。。。") times -= 1 label_hint.text = "请在\(times)s内选择答案!" DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_1_VC.swift
DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -25,6 +25,14 @@ } static func show(clouse:@escaping (Int)->Void){ var needLoad:Bool = true for v in sceneDelegate?.window?.subviews ?? []{ if v is ChooseLevelView{needLoad = false} } guard needLoad else {return} let levelView = ChooseLevelView.jq_loadNibView() levelView.clouseLevel = clouse sceneDelegate?.window?.addSubview(levelView) DolphinEnglishLearnStudent/Services/Services.swift
@@ -62,7 +62,7 @@ } /// 自主学习4-有问有答 class func questionsAndAnswers(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen4Model>>{ class func questionsAndAnswers(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<ListenNewModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/questionsAndAnswers") params.append(key: "quarter", value: quarter) @@ -72,7 +72,7 @@ } /// 自主学习5-音图相配 class func pictureMateVoice(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<Listen1Model>>{ class func pictureMateVoice(day:Int,quarter:Int,week:Int)->Observable<BaseResponse<ListenNewModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/pictureMateVoice") params.append(key: "quarter", value: quarter) Podfile
@@ -14,5 +14,6 @@ pod 'SVProgressHUD' # 提示框组件 pod 'CryptoSwift' # 常用加密算法 pod 'Alamofire' # 网络请求框架 pod 'Lantern' # 图片浏览器 end