| | |
| | | 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() |
| | |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.page = page |
| | | self.listen1Model = listen1Model |
| | | self.listen1Model.subjectList.shuffle() |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | |
| | | 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() |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | 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 |
| | |
| | | self?.rootViewModel.correctNum += 1 |
| | | } |
| | | self?.isAnsterComplete = true |
| | | VoicePlayer.share().playerAt(url: self?.listen1Model.subjectList[index.row].correct) |
| | | }else{ |
| | | answer = .fail |
| | | if self?.isAnsterComplete == false{ |
| | |
| | | |
| | | //回答正确 |
| | | 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) |
| | |
| | | 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 |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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 |
| | | } |
| | | } |
| | | } |
| | | } |