| | |
| | | return label |
| | | }() |
| | | |
| | | private lazy var view_studyHandleView:StudyHandleView = { |
| | | let studyHandleView = StudyHandleView.jq_loadNibView() |
| | | studyHandleView.view_choose.isHidden = true |
| | | private lazy var view_studyHandleView:VoiceHandleView = { |
| | | let studyHandleView = VoiceHandleView() |
| | | return studyHandleView |
| | | }() |
| | | |
| | |
| | | }() |
| | | |
| | | private var timer:Timer? |
| | | private var times:Int = 60 |
| | | private var times:Int = 10 |
| | | private var voicePlayer = VoicePlayer.share() |
| | | |
| | | private var answerSet = Set<Listen1SubModel>() |
| | | private var currentAnswer:Listen1SubModel?{ |
| | | didSet{ |
| | | if let v = currentAnswer{ |
| | | view_studyHandleView.vioceSoundUrl = v.correct |
| | | view_studyHandleView.voicePlayer.playerAt(url: v.correct) |
| | | view_studyHandleView.playUrl = v.correct |
| | | voicePlayer.playerAt(url: v.correct) |
| | | viewModel.answerType.accept(.none) |
| | | } |
| | | } |
| | | } |
| | |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | timer?.invalidate() |
| | | voicePlayer.playerEnd() |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | #if DEBUG |
| | | listen1Model?.data?.time = 60 |
| | | #endif |
| | | |
| | | if listen1Model != nil{ |
| | | times = listen1Model?.data?.time ?? 10 |
| | | collectionView.reloadData() |
| | | label_hint.isHidden = false |
| | | label_hint.text = "\(totalCount)" |
| | | if timer == nil{startTimer()} |
| | | |
| | | label_hint.text = "准备听题" |
| | | |
| | | for v in listen1Model?.subjectList ?? []{ |
| | | answerSet.insert(v) |
| | | } |
| | | |
| | | print("--->开始答题:剩余:\(answerSet.count)") |
| | | currentAnswer = answerSet.randomElement() //随机 |
| | | |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+3) { |
| | | self.currentAnswer = self.answerSet.randomElement() //随机 |
| | | if self.timer == nil{self.startTimer()} |
| | | } |
| | | } |
| | | |
| | | voicePlayer.delegate = self |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | if let c = currentAnswer{ |
| | | answerSet.remove(c) |
| | | } |
| | | currentAnswer = answerSet.randomElement() //随机 |
| | | times = listen1Model?.data?.time ?? 0 |
| | | timer?.fireDate = .distantPast |
| | | totalCount += 1 |
| | | label_class.text = "\(totalCount)" |
| | | currentAnswer = answerSet.randomElement() //随机 |
| | | times = listen1Model?.data?.time ?? 0 |
| | | timer?.fireDate = .distantPast |
| | | totalCount += 1 |
| | | rootViewModel.errorNum += 1 |
| | | label_class.text = "\(totalCount)" |
| | | |
| | | //答题完成 |
| | | if self.answerSet.count == 0{completeQuestion()} |
| | |
| | | let y = abs(newRect.origin.y) + 99 + 5 |
| | | let layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout |
| | | let copyView = view_studyHandleView.copyView() |
| | | copyView.view_choose.isHidden = true |
| | | view.addSubview(copyView) |
| | | |
| | | UIView.animate(withDuration: 0.5) { |
| | | copyView.frame = CGRect(x: x, y: y, width: layout.itemSize.width - 10, height: 40) |
| | | } completion: { _ in |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { |
| | | self.viewModel.answerType.accept(.none) |
| | | self.collectionView.reloadData() |
| | | self.times = self.listen1Model?.data?.time ?? 10 |
| | | self.totalCount += 1 |
| | | self.label_class.text = "\(self.totalCount)" |
| | | self.answerSet.remove(self.currentAnswer!) |
| | | self.currentAnswer = self.answerSet.randomElement() |
| | | print("--->下一题:\(self.currentAnswer?.id ?? 0) 剩余\(self.answerSet.count) 计数:\(self.totalCount)") |
| | | |
| | | // self.collectionView.reloadData() |
| | | self.voicePlayer.playerAt(url: self.currentAnswer?.correct) |
| | | self.timer?.fireDate = .distantFuture |
| | | //答题完成 |
| | | if self.answerSet.count == 0{ |
| | | self.completeQuestion() |
| | |
| | | rootViewModel.errorNum += 1 |
| | | viewModel.answerType.accept(.fail) |
| | | collectionView.reloadData() |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+3) { |
| | | self.currentAnswer = self.answerSet.randomElement() |
| | | } |
| | | case .none: |
| | | break |
| | | } |
| | |
| | | return listen1Model?.subjectList.count ?? 0 |
| | | } |
| | | } |
| | | |
| | | extension HomeListenGame_1_VC:VoicePlayerDelegate{ |
| | | func playComplete() { |
| | | view_studyHandleView.resetView() |
| | | |
| | | if viewModel.answerType.value == .success{ |
| | | self.label_hint.text = "准备请听下一题" |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+3) { |
| | | self.times = self.listen1Model?.data?.time ?? 10 |
| | | #if DEBUG |
| | | self.times = 60 |
| | | #endif |
| | | self.totalCount += 1 |
| | | self.rootViewModel.correctNum += 1 |
| | | self.label_class.text = "\(self.totalCount)" |
| | | self.answerSet.remove(self.currentAnswer!) |
| | | self.currentAnswer = self.answerSet.randomElement() |
| | | self.viewModel.answerType.accept(.none) |
| | | print("--->下一题:\(self.currentAnswer?.id ?? 0) 剩余\(self.answerSet.count) 计数:\(self.totalCount)") |
| | | self.timer?.fireDate = .distantPast |
| | | } |
| | | } |
| | | } |
| | | |
| | | func playing() { |
| | | view_studyHandleView.playing() |
| | | } |
| | | |
| | | } |