DolphinEnglishLearnStudent.xcodeproj/project.pbxproj
@@ -993,6 +993,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 5ZV937VB25; ENABLE_USER_SCRIPT_SANDBOXING = NO; DolphinEnglishLearnStudent/Models/CommonModel.swift
@@ -268,6 +268,15 @@ required init(){} } struct TeamScheduleModel:HandyJSON{ var answerNumber = 0 var correctNumber = 0 var teamIds = [Int]() //题组ids var topicIds = [Int]() //已回答正确的题目Id } struct Listen1DataModel:HandyJSON{ var createBy: String = "" var createTime: String = "" DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -21,7 +21,6 @@ private var listenNewModel:ListenNewModel! private var randomElement:Listen1SubModel? private var page:Int! var rootViewModel:HomeListenFightViewModel! private var isListen:Bool = false private var isAnsterComplete:Bool = false //是否已经回答完成[小题] private var isAnsterDone:Bool = false //是否已经回答完成[大题] @@ -42,6 +41,20 @@ return collection }() var rootViewModel:HomeListenFightViewModel! var teamScheduleModel:TeamScheduleModel?{ didSet{ if let m = teamScheduleModel{ for v in listenNewModel.subjectList[page]{ //已回答 if m.topicIds.contains(v.id){ isAnsterModel.insert(v) //记录 } } } } } required init(page:Int,listenNewModel:ListenNewModel){ super.init(nibName: nil, bundle: nil) self.page = page @@ -60,7 +73,7 @@ //制造随机 listenNewModel.subjectList[page].shuffle() getNextAnswer() getNextAnswer(isFirst: true) menuView?.listenType = .lesson1 DispatchQueue.main.asyncAfter(deadline: .now()+2) { @@ -91,16 +104,14 @@ menuView?.resetView() setUI() collectionView.reloadData() getNextAnswer(isFirst: true) } private func getNextAnswer(){ /// 下一题 /// - Parameter isFirst: 是否首次进入,首次页码不+1 private func getNextAnswer(isFirst:Bool = false){ isListen = false if isAnsterModel.count == 4{ if !isAnsterDone{ let v = rootViewModel.answerCount.value rootViewModel.answerCount.accept(v + 1) } isAnsterDone = true DispatchQueue.main.asyncAfter(deadline: .now()+3){[weak self] in guard let weakSelf = self else { return } @@ -108,6 +119,8 @@ weakSelf.viewModel.answerType.accept(.none) weakSelf.viewModel.selectIndex.accept(nil) weakSelf.isListen = false let v = weakSelf.rootViewModel.answerCount.value weakSelf.rootViewModel.answerCount.accept(v + 1) } return } @@ -131,6 +144,11 @@ DispatchQueue.main.asyncAfter(deadline: .now()+2) { VoicePlayer.share().playerAt(url: self.randomElement?.correct) self.menuView?.playing() } if !isAnsterDone && isAnsterModel.count <= 4 && !isFirst{ let v = rootViewModel.answerCount.value rootViewModel.answerCount.accept(v + 1) } } @@ -289,10 +307,6 @@ if isAnsterComplete{ getNextAnswer() if !isAnsterDone{ let v = rootViewModel.answerCount.value rootViewModel.answerCount.accept(v + 1) } } } } DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift
@@ -41,15 +41,23 @@ @IBAction func listenAction(_ sender: UIButton) { Services.goodRecommend().subscribe(onNext: { data in AwardListView.show(items: data.data ?? []) { _ in let listenMenuVC = HomeListenMenuVC() listenMenuVC.title = "第一年学习周目选择" self.push(vc: listenMenuVC) }closeClouse: { () in if (data.data?.count ?? 0) > 0{ AwardListView.show(items: data.data ?? []) { _ in // not todo }closeClouse: { () in let listenMenuVC = HomeListenMenuVC() listenMenuVC.title = "第一年学习周目选择" self.push(vc: listenMenuVC) } }else{ let listenMenuVC = HomeListenMenuVC() listenMenuVC.title = "第一年学习周目选择" self.push(vc: listenMenuVC) } },onError: { error in let listenMenuVC = HomeListenMenuVC() listenMenuVC.title = "第一年学习周目选择" self.push(vc: listenMenuVC) }).disposed(by: disposeBag) DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_Pocket_CCell.swift
@@ -65,10 +65,6 @@ contentVoiceView.jq_cornerRadius = 8 voice_view.addSubview(contentVoiceView) contentVoiceView.snp.makeConstraints { make in // make.left.equalTo(40) // make.right.equalTo(-40) // make.top.equalTo(55) // make.bottom.equalTo(-55) make.center.equalToSuperview() make.width.equalTo(self.width * 0.66) make.height.equalTo(self.height * 0.32) @@ -76,7 +72,7 @@ contentVoiceView.addSubview(img1) img1.snp.makeConstraints { make in make.left.equalTo(23) make.left.equalTo(self.width * 0.0958) make.width.height.equalTo(self.width * 0.133) make.centerY.equalToSuperview() } @@ -84,8 +80,8 @@ contentVoiceView.addSubview(img2) img2.snp.makeConstraints { make in make.width.equalTo(45) make.height.equalTo(31) make.width.equalTo(self.width * 0.1875) make.height.equalTo(self.width * 0.1292) make.center.equalToSuperview() } @@ -93,15 +89,15 @@ playBtn.setImage(UIImage(named: "icon_play")?.withTintColor(UIColor(hexString: "#41A2EB")!), for: .normal) contentVoiceView.addSubview(playBtn) playBtn.snp.makeConstraints { make in make.right.equalTo(-23) make.width.height.equalTo(32) make.right.equalTo(-self.width * 0.0958) make.width.height.equalTo(self.width * 0.133) make.centerY.equalToSuperview() } addSubview(stateImg) stateImg.snp.makeConstraints { make in make.center.equalToSuperview() make.width.height.equalTo(76) make.width.height.equalTo(self.width * 0.316) } cellResotePay() DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift
@@ -36,6 +36,10 @@ self.image_state.alpha = 1 self.image_state.transform = .init(scaleX: 1, y: 1) } UIView.animate(withDuration: 0.5, delay: 3.0) { self.image_state.alpha = 0 self.image_state.transform = .init(scaleX: 0.1, y: 0.1) } case .fail: image_state.image = UIImage(named: "icon_fail") UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.4, options: .layoutSubviews) { @@ -43,6 +47,7 @@ self.image_state.transform = .init(scaleX: 1, y: 1) UIView.animate(withDuration: 0.5, delay: 3.0) { self.image_state.alpha = 0 self.image_state.transform = .init(scaleX: 0.1, y: 0.1) } } case .none: DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.swift
@@ -9,7 +9,7 @@ class ListenFight_lesson_4_CCell: UICollectionViewCell { @IBOutlet weak var view_handle: UIView! @IBOutlet weak var view_handle: TapBtn! @IBOutlet weak var img_cover: UIImageView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var img_state: UIImageView! @@ -33,17 +33,25 @@ func playAtIndex(clouse:@escaping(IndexPath)->Void){ self.playAtIndexClouse = clouse } @IBAction func playAction(_ sender: UIButton) { func playing(){ btn_handle.isHidden = true btn_play.isHidden = true btn_voice.setImage(UIImage(named: "icon_playing"), for: .normal) } func playEnd(){ btn_handle.isHidden = false btn_play.isHidden = false btn_voice.setImage(UIImage(named: "icon_play_1"), for: .normal) } @IBAction func playAction(_ sender: TapBtn) { if let m = model{ // btn_play.isHidden = true VoicePlayer.share().playerAt(url: m.correct) playAtIndexClouse?(indexPath) // VoicePlayer.share().playEnd { // self.btn_play.isHidden = false // } playing() } } } DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.xib
@@ -18,24 +18,21 @@ <rect key="frame" x="0.0" y="0.0" width="597" height="510"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xjz-V8-keG"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xjz-V8-keG" customClass="TapBtn" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="159" height="52"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LLy-9v-eQJ"> <rect key="frame" x="104" y="10" width="32" height="32"/> <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LLy-9v-eQJ"> <rect key="frame" x="105" y="10" width="31" height="32"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play"/> <connections> <action selector="playAction:" destination="gTV-IL-0wX" eventType="touchUpInside" id="FV8-uE-yj8"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgj-Ss-D90"> <rect key="frame" x="65" y="12.5" width="27" height="27"/> <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgj-Ss-D90"> <rect key="frame" x="66" y="12.5" width="27" height="27"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play_1"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZuK-r9-26C"> <rect key="frame" x="14" y="9.5" width="33" height="33"/> <button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZuK-r9-26C"> <rect key="frame" x="15" y="9.5" width="33" height="33"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_question"/> </button> @@ -49,6 +46,7 @@ <constraint firstItem="LLy-9v-eQJ" firstAttribute="leading" secondItem="kgj-Ss-D90" secondAttribute="trailing" constant="12" id="MoJ-Ne-mlq"/> <constraint firstAttribute="height" constant="52" id="gfp-ph-1NP"/> <constraint firstItem="kgj-Ss-D90" firstAttribute="leading" secondItem="ZuK-r9-26C" secondAttribute="trailing" constant="18" id="qM1-Yp-Nha"/> <constraint firstItem="kgj-Ss-D90" firstAttribute="centerX" secondItem="Xjz-V8-keG" secondAttribute="centerX" id="x1s-RS-WOb"/> <constraint firstItem="kgj-Ss-D90" firstAttribute="centerY" secondItem="Xjz-V8-keG" secondAttribute="centerY" id="zxl-IP-PhN"/> </constraints> <userDefinedRuntimeAttributes> @@ -57,6 +55,9 @@ <real key="value" value="8"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="playAction:" destination="gTV-IL-0wX" eventType="touchUpInside" id="8ns-md-QJB"/> </connections> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OJ6-0b-fVC"> <rect key="frame" x="0.0" y="62" width="597" height="438"/> DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -72,6 +72,7 @@ } } /// 回答错误数量 var errorNum:Int = 0{ didSet{ print("回答错误:\(correctNum)") @@ -165,7 +166,7 @@ self.viewModel.maxPage.accept(1) } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -175,8 +176,8 @@ sceneDelegate?.suspendTimer() } override func viewDidLoad() { super.viewDidLoad() override func viewDidLoad() { super.viewDidLoad() yy_popBlock = {[weak self] in self?.quitAction(isPop: true) @@ -195,7 +196,38 @@ timer.fire() RunLoop.current.add(timer, forMode: .common) } Services.teamSchedule(type: viewModel.listenType.value, week: viewModel.week.value!, day: viewModel.day.value!).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let model = data.data{ weakSelf.viewModel.correctNum = weakSelf.viewModel.correctNum + model.correctNumber weakSelf.viewModel.errorNum = model.answerNumber - model.correctNumber //跳转至指定页面 let page = max(0,model.topicIds.count - 1) if weakSelf.pageVC.currentPage != page{ weakSelf.pageVC.scroll(toPage: page, animation: false) } DispatchQueue.main.asyncAfter(wallDeadline: .now()+0.5){ switch weakSelf.viewModel.listenType.value { case .lesson1: let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_1_VC case .lesson2: let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_2_VC case .lesson3: let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_3_VC case .lesson4: let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_4_VC case .lesson5: let vc = weakSelf.pageVC.currentController as! HomeListenFight_lesson_5_VC default: break } } } }).disposed(by: disposeBag) } override func setUI() { super.setUI() @@ -298,7 +330,7 @@ case .story1,.story2: if let dict = noti.object as? Dictionary<String,Any>{ let type = weakSelf.viewModel.listenType.value == .story1 ? 1:2 let accracy = Int(Double(weakSelf.viewModel.correctNum) / Double(weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum) * 100) let accracy = String(format: "%.0lf", Double(weakSelf.viewModel.correctNum) / Double(weakSelf.viewModel.correctNum + weakSelf.viewModel.errorNum) * 100).int ?? 0 weakSelf.storyComplete(storyId: dict["storyId"] as! Int, accuracy: accracy, studyTime: weakSelf.viewModel.times, type: type, integral: dict["storyIntegral"] as! Int) } } @@ -362,17 +394,17 @@ /// 学习类完成 /// - Parameter ignorePush: 是否忽略跳转(未完成答题 :true) private func studyComplete(){ var toalIntegral:Int = 0 // var toalIntegral:Int = 0 let ids:String = viewModel.answerItems_1.keys.sorted().joined(separator: ",") switch viewModel.listenType.value { case .lesson1,.lesson2,.lesson3,.lesson4,.lesson5: let data = (data as! ListenNewModel).data toalIntegral = data?.integral ?? 0 // toalIntegral = data?.integral ?? 0 default:break } //正确率 let accracy = Int(Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100) let accracy = String(format: "%.0lf", Double(viewModel.correctNum) / Double(viewModel.correctNum + viewModel.errorNum) * 100).int ?? 0 Services.completeLearing(type: viewModel.listenType.value.rawValue, studyTime: viewModel.times, studyIds: ids, quarter: viewModel.quarter.value!, week: viewModel.week.value!, day: viewModel.day.value!, accracy: accracy).subscribe(onNext: {data in NotificationCenter.default.post(name: Refresh_ListenSchedule_Noti, object: nil) @@ -381,9 +413,9 @@ timer.invalidate() toalIntegral = floor(Double(toalIntegral) * (Double(accracy) / 100.0)).int // toalIntegral = floor(Double(toalIntegral) * (Double(accracy) / 100.0)).int let vc = HomeStudyCompleteVC(totalCoin: toalIntegral,viewModel: viewModel,studyScheduleModel: studyScheduleModel!) let vc = HomeStudyCompleteVC(viewModel: viewModel,studyScheduleModel: studyScheduleModel!) vc.title = viewModel.listenType.value.rawTitle vc.viewModel = viewModel push(vc: vc) @@ -395,27 +427,27 @@ var name = "" var accuracy:Int = 0 var totalNum:Double = 0 var toalIntegral:Int = 0 // var toalIntegral:Int = 0 if viewModel.listenType.value == .game1{ name = "超级听力" totalNum = Double(viewModel.correctNum + viewModel.errorNum) if totalNum > 0{ accuracy = Int(Double(viewModel.correctNum) / totalNum * 100) accuracy = String(format: "%.0lf", Double(viewModel.correctNum) / totalNum * 100).int ?? 0 } toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int // toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int }else{ name = "超级记忆" let v = viewModel.answerItems.first?.value as! Listen1Model //11887:完成答题页,总题目、错误题目 数量计算逻辑错误(只要是没有答对的题目就算错误题目,不管是否答,相当于错误题目就是总题目减去正确题目) totalNum = Double(v.photoList.count) if totalNum > 0 && viewModel.correctNum > 0 && viewModel.errorNum > 0{ accuracy = Int(Double(viewModel.correctNum) / Double(totalNum) * 100) accuracy = String(format: "%.0lf", Double(viewModel.correctNum) / Double(totalNum) * 100).int ?? 0 } viewModel.errorNum = Int(totalNum) - viewModel.correctNum toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int // toalIntegral = floor(Double(integral) * (Double(accuracy) / 100.0)).int } Services.completeGames(gameId: gameId, gameName: name, difficulty: viewModel.gameLevel.value, accuracy: accuracy, useTime: viewModel.times).subscribe(onNext: {data in @@ -425,7 +457,7 @@ timer.invalidate() let vc = HomeStudyCompleteVC(totalCoin: toalIntegral,totalNum:totalNum.int,viewModel: viewModel,studyScheduleModel: studyScheduleModel!) let vc = HomeStudyCompleteVC(totalNum:totalNum.int,viewModel: viewModel,studyScheduleModel: studyScheduleModel!) vc.title = viewModel.listenType.value.rawTitle vc.viewModel = viewModel push(vc: vc) @@ -438,7 +470,7 @@ NotificationCenter.default.post(name: StudyCompleteCoinUpdate_Noti, object: data.data ?? 0) }).disposed(by: disposeBag) let vc = HomeStudyCompleteVC(totalCoin: integral,viewModel: viewModel,studyScheduleModel: studyScheduleModel!) let vc = HomeStudyCompleteVC(viewModel: viewModel,studyScheduleModel: studyScheduleModel!) vc.title = viewModel.listenType.value.rawTitle vc.viewModel = viewModel push(vc: vc) @@ -456,13 +488,13 @@ CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in guard let weakSelf = self else { return } for vc in weakSelf.navigationController?.viewControllers ?? []{ if vc.isKind(of: HomeListenMenuVC.self){ weakSelf.navigationController?.popToViewController(vc, animated: true);break } if vc.isKind(of: HomeListenVC.self){ weakSelf.navigationController?.popToViewController(vc, animated: true);break } // if vc.isKind(of: HomeListenMenuVC.self){ // weakSelf.navigationController?.popToViewController(vc, animated: true);break // } } } return @@ -477,6 +509,23 @@ storyComplete(storyId: v.data!.id, accuracy: accuracy, studyTime: viewModel.times, type: viewModel.listenType.value == .story1 ? 1:2, integral: v.data!.integral) } }else if btn_exit.titleLabel?.text == "提交"{ if isPop{ CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {[weak self] () in guard let weakSelf = self else { return } for vc in weakSelf.navigationController?.viewControllers ?? []{ if vc.isKind(of: HomeListenVC.self){ weakSelf.navigationController?.popToViewController(vc, animated: true);break } // if vc.isKind(of: HomeListenMenuVC.self){ // weakSelf.navigationController?.popToViewController(vc, animated: true);break // } } } return } if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{ if let dict = notiObject{ gamesComplete(gameId: dict["gameId"] as! Int,integral: dict["gameIntegral"] as! Int) @@ -513,13 +562,13 @@ }).disposed(by: weakSelf.disposeBag) } for vc in weakSelf.navigationController?.viewControllers ?? []{ if vc.isKind(of: HomeListenMenuVC.self){ weakSelf.navigationController?.popToViewController(vc, animated: true);break } if vc.isKind(of: HomeListenVC.self){ weakSelf.navigationController?.popToViewController(vc, animated: true);break } // // if vc.isKind(of: HomeListenMenuVC.self){ // weakSelf.navigationController?.popToViewController(vc, animated: true);break // } } } } @@ -543,8 +592,10 @@ @objc func beforeAction(){ guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else { alert(msg: "请听完");return if viewModel.listenType.value == .story2{ guard (pageVC.currentController as! HomeListenStory_2_VC).isPlayEnd else { alert(msg: "请听完");return } } listenFightLine = .before DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
@@ -46,11 +46,11 @@ self.page = page self.listenNewModel = listenNewModel } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() navigationItem.titleView = UIView() @@ -240,8 +240,10 @@ //copy试图放在上面进行覆盖 let copyHandleView = studyHandleView.copyView() copyHandleView.view_choose.isHidden = true copyHandleView.listenType = .lesson2 copyHandleView.isplaying() copyHandleView.vioceSoundUrl = listenNewModel.subjectList[page][self.viewModel.selectIndex.value!.row].correct copyHandleView.btn_state.setImage(nil, for: .normal) copyHandleView.jq_cornerRadius = 0 view.addSubview(copyHandleView) view.layoutIfNeeded() @@ -323,7 +325,7 @@ } } func playComplete() { view.isUserInteractionEnabled = true //对已经播放过的View,进行刷新 @@ -337,12 +339,20 @@ } } for sub in view.subviews{ if let v = sub as? StudyHandleView{ v.resetView() } } if viewModel.answerType.value == .success{ let v = rootViewModel.answerCount.value rootViewModel.answerCount.accept(v + 1) viewModel.answerType.accept(.none) DispatchQueue.main.asyncAfter(deadline: .now()+3) { self.resetStackView() self.viewModel.answerType.accept(.none) } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
@@ -239,13 +239,15 @@ rootViewModel.answerCount.accept(v) } //正确才记录回答 answerIndexs.insert(answerIndex!) }else{ answerType = .fail voicePlayer.playFailVoice() rootViewModel.errorNum += 1 } voicePlayer.playerEnd() answerIndexs.insert(answerIndex!) switch answerType { case .success: @@ -338,6 +340,10 @@ cell.img_state.alpha = 1 cell.img_state.transform = .init(scaleX: 1.0, y: 1.0) } UIView.animate(withDuration: 0.4, delay: 3.0) { cell.img_state.alpha = 0 cell.img_state.transform = .init(scaleX: 0.1, y: 0.1) } }else{ cell.img_state.alpha = 0 cell.img_state.transform = .init(scaleX: 0.1, y: 0.1) @@ -390,6 +396,10 @@ func playComplete() { self.view.isUserInteractionEnabled = true if let indexPath = viewModel.selectIndex.value ,let cell = collectionView.cellForItem(at: indexPath) as? ListenFight_lesson_4_CCell{ cell.playEnd() } //回答完成,下一答题 if answerIndexs.count == 2{ voicePlayer.playerEnd() DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
@@ -241,9 +241,11 @@ answterCount += 1 rootViewModel.correctNum += 1 viewModel.answerType.accept(.success) label_hint.text = "" let copyView = tempSubV.copyView() copyView.listenType = .lesson5 copyView.jq_cornerRadius = 0 copyView.playUrl = selectAnswer.correct let newRect = tempSubV.convert(tempSubV.bounds, to: self.view) copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 159, height: 52)) @@ -258,7 +260,7 @@ if let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as? ListenFight_lesson_1_CCell{ var newRect1 = cell.convert(cell.bounds, to: self.collectionView) newRect1.origin.x += (collectionView.frame.origin.x + 5) newRect1.origin.y += 94 + 25 newRect1.origin.y += 94 + 24 UIView.animateKeyframes(withDuration: 0.4, delay: 0,options: .calculationModeLinear) { copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: flowLayout.itemSize.width - 10 , height: 40)) DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
@@ -262,12 +262,15 @@ totalCount += 1 label_class.text = "\(totalCount)" viewModel.answerType.accept(.fail) timer?.fireDate = .distantFuture label_hint.text = "准备听题" //移除当前题目 if let c = currentAnswer{ answerSet.remove(c) } collectionView.reloadData() DispatchQueue.main.asyncAfter(deadline: .now()+3) { self.timer?.fireDate = .distantPast self.times = (self.listen1Model?.data?.time ?? 10) + 1 self.currentAnswer = self.answerSet.randomElement() } @@ -364,7 +367,8 @@ view.isUserInteractionEnabled = false view_studyHandleView.playing() timer?.fireDate = .distantFuture //播放中,暂停计时 label_hint.text = "播放中" // label_hint.text = "播放中" label_hint.text = "" } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenStory_2_VC.swift
@@ -48,6 +48,7 @@ override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) voicePlayer.delegate = self restore() } override func viewDidDisappear(_ animated: Bool) { @@ -101,6 +102,7 @@ } func restore(){ isPlayEnd = false viewModel.answerType.accept(.none) setUI() collectionView.reloadData() DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
@@ -26,6 +26,10 @@ alpha = 0 transform = .init(scaleX: 0.1, y: 0.1) layoutIfNeeded() btn_level1.setTitleColor(.black.withAlphaComponent(0.3), for: .normal) btn_level2.setTitleColor(.black.withAlphaComponent(0.3), for: .normal) btn_level3.setTitleColor(.black.withAlphaComponent(0.3), for: .normal) } static func show(canLevel:Int,clouse:@escaping (Int)->Void,cancelClouse:@escaping()->Void){ @@ -42,21 +46,18 @@ 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 2: levelView.btn_level3.isEnabled = true levelView.btn_level3.setTitleColor(.black.withAlphaComponent(0.6), for: .normal) fallthrough case 1: levelView.btn_level2.isEnabled = true levelView.btn_level2.setTitleColor(.black.withAlphaComponent(0.6), for: .normal) fallthrough case 0: levelView.btn_level1.isEnabled = true levelView.btn_level1.setTitleColor(.black.withAlphaComponent(0.6), for: .normal) default: levelView.btn_level1.isEnabled = true levelView.btn_level1.setTitleColor(.black.withAlphaComponent(0.6), for: .normal) } UIView.animate(withDuration: 0.4) { @@ -68,6 +69,13 @@ } @IBAction func chooseAction(_ sender: QMUIButton) { guard sender.alpha == 1.0 else { sender.alpha = 0.5 sender.isSelected = false alertError(msg: "请先完成上一难度再挑战");return } level = sender.tag - 10 for subView in tackView_level.arrangedSubviews as! [QMUIButton]{ subView.isSelected = sender.tag == subView.tag DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift
@@ -23,15 +23,15 @@ @IBOutlet weak var stackView: UIStackView! @IBOutlet weak var btn_back: UIButton! private var totalCoin:Int = 0 // private var totalCoin:Int = 0 private var totalNum:Int? //总题目数量 var viewModel:HomeListenFightViewModel! var studyScheduleModel:StudyScheduleModel! required init(totalCoin:Int,totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){ required init(totalNum:Int? = nil,viewModel:HomeListenFightViewModel,studyScheduleModel:StudyScheduleModel){ super.init(nibName: nil, bundle: nil) self.totalCoin = totalCoin // self.totalCoin = totalCoin self.totalNum = totalNum self.viewModel = viewModel self.studyScheduleModel = studyScheduleModel @@ -48,7 +48,7 @@ self?.backAction() } label_coin.text = "恭喜您,已完成全部答题!获得\(totalCoin)积分!" label_coin.text = "恭喜您,已完成全部答题!获得0积分!" label_correctNum.text = "\(viewModel.correctNum)次" label_errorNum.text = "\(viewModel.errorNum)次" label_totalNum.text = "\(viewModel.correctNum + viewModel.errorNum)次" @@ -63,7 +63,7 @@ label_title_totalNum.text = "总题目:" label_title_correctNum.text = "正确题目:" label_title_errorNum.text = "错误题目:" label_coin.text = "恭喜您,已完成游戏!获得\(totalCoin)积分!" label_coin.text = "恭喜您,已完成游戏!获得0积分!" label_totalNum.text = "\(totalNum!)" label_correctNum.text = "\(viewModel.correctNum)" @@ -159,7 +159,7 @@ Services.pictureMateVoice(day: viewModel.day.value!, quarter: viewModel.quarter.value!, week: viewModel.week.value!).subscribe(onNext: {[weak self] result in guard let weakSelf = self else { return } if let data = result.data{ let fightVC = HomeListenFightVC(listenType: .lesson4,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!) let fightVC = HomeListenFightVC(listenType: .lesson5,quarter:weakSelf.viewModel.quarter.value!,week: weakSelf.viewModel.week.value!,day:weakSelf.viewModel.day.value!) fightVC.title = ListenType.lesson5.rawTitle fightVC.data = data fightVC.studyScheduleModel = weakSelf.studyScheduleModel DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift
@@ -142,9 +142,14 @@ return } let vc = MarketExchangeVC(viewModel: viewModel) vc.title = "立即兑换" push(vc: vc) Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in self.viewModel.detailModel.accept(result.data) let vc = MarketExchangeVC(viewModel: self.viewModel) vc.title = "立即兑换" self.push(vc: vc) }) { error in }.disposed(by: disposeBag) } override func viewDidLayoutSubviews() { DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift
@@ -44,13 +44,15 @@ override func viewDidLoad() { super.viewDidLoad() Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in self.label_orderNum.text = result.data?.orderNumber ?? "" self.viewModel.detailModel.accept(result.data) }) { error in self.btn_exchange.backgroundColor = .gray.withAlphaComponent(0.5) self.btn_exchange.isEnabled = false }.disposed(by: disposeBag) label_orderNum.text = viewModel.detailModel.value?.orderNumber ?? "" // Services.redeemNow(goodId: viewModel.detailModel.value!.good!.id).subscribe(onNext: {result in // result.data?.orderNumber ?? "" // self.viewModel.detailModel.accept(result.data) // }) { error in // self.btn_exchange.backgroundColor = .gray.withAlphaComponent(0.5) // self.btn_exchange.isEnabled = false // }.disposed(by: disposeBag) Services.addressList().subscribe(onNext: {[weak self]result in self?.viewModel.address.accept(result.data ?? []) DolphinEnglishLearnStudent/Moudle/Me/MeVC.swift
@@ -115,4 +115,10 @@ }).disposed(by: self.disposeBag) } } @IBAction func becomeVIPAction(_ sender: Any) { let vc = VIPCenterVC() vc.title = "会员中心" push(vc: vc) } } DolphinEnglishLearnStudent/Moudle/Me/MeVC.xib
@@ -58,10 +58,23 @@ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="calibratedRGB"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l8U-Jk-mSI"> <rect key="frame" x="774" y="48.5" width="74" height="34"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="成为会员"> <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="becomeVIPAction:" destination="-1" eventType="touchUpInside" id="x97-3g-TlQ"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="D0d-O7-Pt2" firstAttribute="leading" secondItem="qXF-FL-HEr" secondAttribute="trailing" constant="18" id="0RC-Ct-neE"/> <constraint firstAttribute="trailing" secondItem="l8U-Jk-mSI" secondAttribute="trailing" constant="20" id="4r4-96-WXO"/> <constraint firstItem="l8U-Jk-mSI" firstAttribute="centerY" secondItem="Ora-D0-c8V" secondAttribute="centerY" id="6bS-zc-O8v"/> <constraint firstItem="LJb-Ki-p3S" firstAttribute="top" secondItem="D0d-O7-Pt2" secondAttribute="bottom" constant="10" id="ILj-gS-zIv"/> <constraint firstItem="qXF-FL-HEr" firstAttribute="centerY" secondItem="Ora-D0-c8V" secondAttribute="centerY" id="OLa-Ch-3Ab"/> <constraint firstItem="qXF-FL-HEr" firstAttribute="leading" secondItem="Ora-D0-c8V" secondAttribute="leading" constant="16" id="XVR-3Y-0ky"/> DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift
@@ -73,7 +73,7 @@ switch exchangeRecordModel!.state{ case 1: let vc = AddressManageVC(type: .handle) let vc = AddressManageVC(type: .choose) vc.title = "修改地址" vc.chooseAddress { m in CommonAlertView.show(content: "确认修改当前收货地址吗?") {[weak self] () in DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.xib
@@ -63,31 +63,8 @@ <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="vd5-iK-Ujb"> <rect key="frame" x="173" y="95.5" width="609" height="61"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PlF-D7-xZD"> <rect key="frame" x="0.0" y="0.0" width="609" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收获信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qnF-SM-ngM"> <rect key="frame" x="0.0" y="22" width="609" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="发货信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSS-lo-Yba"> <rect key="frame" x="0.0" y="44" width="609" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> </stackView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xwt-lH-fyW"> <rect key="frame" x="703" y="209" width="124" height="40"/> <rect key="frame" x="703" y="157" width="124" height="40"/> <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="width" constant="124" id="3Ct-u1-c4s"/> @@ -106,26 +83,49 @@ <action selector="handleAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="dgK-UX-7H1"/> </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量:-" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PlF-D7-xZD"> <rect key="frame" x="173" y="95.5" width="78" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收获信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qnF-SM-ngM"> <rect key="frame" x="173" y="117.5" width="609" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="发货信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSS-lo-Yba"> <rect key="frame" x="173" y="139.5" width="660" height="17"/> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/> <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="UdI-oe-WSO" firstAttribute="leading" secondItem="HZS-Oe-5LR" secondAttribute="trailing" constant="17" id="57C-Fp-3AO"/> <constraint firstItem="viA-yT-ZWk" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="6Fj-YY-5Lr"/> <constraint firstAttribute="trailing" secondItem="xwt-lH-fyW" secondAttribute="trailing" constant="11" id="6RI-NH-2my"/> <constraint firstItem="PlF-D7-xZD" firstAttribute="leading" secondItem="qnF-SM-ngM" secondAttribute="leading" id="8UU-18-mxy"/> <constraint firstItem="9oA-7x-in6" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="AHE-Ei-2xt"/> <constraint firstItem="vd5-iK-Ujb" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="CRk-D7-Sa0"/> <constraint firstAttribute="trailing" secondItem="qnF-SM-ngM" secondAttribute="trailing" constant="56" id="Ake-gb-ygI"/> <constraint firstItem="cSS-lo-Yba" firstAttribute="leading" secondItem="qnF-SM-ngM" secondAttribute="leading" id="C17-9I-0U5"/> <constraint firstItem="PlF-D7-xZD" firstAttribute="top" secondItem="viA-yT-ZWk" secondAttribute="bottom" constant="7" id="Cdf-sE-e8f"/> <constraint firstAttribute="bottom" secondItem="HZS-Oe-5LR" secondAttribute="bottom" priority="750" constant="18" id="Dbk-Lt-Ude"/> <constraint firstItem="9oA-7x-in6" firstAttribute="top" secondItem="EWl-m5-3O9" secondAttribute="top" constant="19" id="Kd6-sy-ai0"/> <constraint firstAttribute="trailing" secondItem="nMG-SO-H2Z" secondAttribute="trailing" constant="11" id="NXe-Od-1mg"/> <constraint firstItem="PlF-D7-xZD" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="Sob-lc-V0Q"/> <constraint firstItem="qnF-SM-ngM" firstAttribute="top" secondItem="PlF-D7-xZD" secondAttribute="bottom" constant="5" id="UAP-dY-8dm"/> <constraint firstItem="xwt-lH-fyW" firstAttribute="bottom" secondItem="HZS-Oe-5LR" secondAttribute="bottom" id="W7s-Ct-asF"/> <constraint firstItem="UdI-oe-WSO" firstAttribute="top" secondItem="HZS-Oe-5LR" secondAttribute="top" id="ZyM-TK-6FN"/> <constraint firstAttribute="trailing" secondItem="viA-yT-ZWk" secondAttribute="trailing" id="d0F-tv-fNn"/> <constraint firstItem="viA-yT-ZWk" firstAttribute="top" secondItem="UdI-oe-WSO" secondAttribute="bottom" id="fFu-Xa-Vst"/> <constraint firstAttribute="bottom" secondItem="xwt-lH-fyW" secondAttribute="bottom" constant="18" id="h2F-rW-tSx"/> <constraint firstItem="vd5-iK-Ujb" firstAttribute="top" secondItem="viA-yT-ZWk" secondAttribute="bottom" constant="7" id="kmP-P0-Yhd"/> <constraint firstAttribute="bottom" secondItem="vd5-iK-Ujb" secondAttribute="bottom" priority="250" constant="101.5" id="lGT-yn-Kw9"/> <constraint firstItem="cSS-lo-Yba" firstAttribute="top" secondItem="qnF-SM-ngM" secondAttribute="bottom" constant="5" id="lb9-Qa-LhG"/> <constraint firstItem="nMG-SO-H2Z" firstAttribute="centerY" secondItem="UdI-oe-WSO" secondAttribute="centerY" id="ne0-kd-EzF"/> <constraint firstItem="HZS-Oe-5LR" firstAttribute="top" secondItem="9oA-7x-in6" secondAttribute="bottom" constant="13" id="nvs-xY-hiH"/> <constraint firstItem="HZS-Oe-5LR" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="u6c-56-glh"/> <constraint firstAttribute="trailing" secondItem="vd5-iK-Ujb" secondAttribute="trailing" constant="56" id="ucU-JO-6dg"/> <constraint firstAttribute="trailing" secondItem="cSS-lo-Yba" secondAttribute="trailing" constant="5" id="wZ2-Yj-Y4L"/> <constraint firstAttribute="trailing" secondItem="UdI-oe-WSO" secondAttribute="trailing" constant="90" id="z0n-ib-Q7m"/> </constraints> </view> DolphinEnglishLearnStudent/Moudle/Me/VC/VIPCenterVC.swift
@@ -6,8 +6,12 @@ // import UIKit import WebKit class VIPCenterVC: BaseVC { private var btn_vip:UIButton! private var webView:WKWebView! override func viewDidLoad() { super.viewDidLoad() @@ -27,10 +31,33 @@ weakSelf.navigationController?.popViewController(animated: true) } } Services.vipInfo().subscribe(onNext: {data in }).disposed(by: disposeBag) } override func setUI() { } webView = WKWebView(frame: .zero) view.addSubview(webView) webView.snp.makeConstraints { make in make.edges.equalToSuperview() } btn_vip = UIButton(type: .custom) btn_vip.setTitle("成为会员", for: .normal) btn_vip.setTitleColor(.white, for: .normal) btn_vip.backgroundColor = UIColor(hexStr: "#41A2EB") btn_vip.titleLabel?.font = .systemFont(ofSize: 16, weight: .medium) btn_vip.jq_cornerRadius = 8 view.addSubview(btn_vip) btn_vip.snp.makeConstraints { make in make.width.equalTo(316) make.height.equalTo(49) make.bottom.equalTo(-91) make.centerX.equalToSuperview() } } } DolphinEnglishLearnStudent/Moudle/Me/View/ShareView.swift
@@ -33,14 +33,6 @@ cons_bottom.constant = -JQ_ScreenW alpha = 0 layoutIfNeeded() Services.shareInfo().subscribe(onNext: { data in if let m = data.data{ self.shareModel = m self.label_info.text = m.title self.img_cover.sd_setImage(with: URL(string: m.img)) } }).disposed(by: disposeBag) } static func show(){ @@ -70,18 +62,22 @@ @IBAction func shareAction(_ sender: QMUIButton) { guard shareModel != nil else {alertError(msg: "数据获取失败");return} var scene:WXScene! if sender.tag == 10{ scene = WXSceneSession }else{ scene = WXSceneTimeline } showHUD() SDWebImageDownloader.shared.downloadImage(with: URL(string: shareModel!.img)) { iamge, data, error, state in hiddenHUD() guard error == nil else {alert(msg: "图片获取失败");return} WeChatTools.shareUrl("https://dollearn.com/", title: "海豚智能教育平台", desc: self.shareModel!.title, thumb: iamge!, scene: scene) } Services.shareInfo().subscribe(onNext: { data in if let m = data.data{ var scene:WXScene! if sender.tag == 10{ scene = WXSceneSession }else{ scene = WXSceneTimeline } showHUD() SDWebImageDownloader.shared.downloadImage(with: URL(string: m.img)) { iamge, data, error, state in hiddenHUD() guard error == nil else {alert(msg: "图片获取失败");return} WeChatTools.shareUrl("https://dollearn.com/", title: m.title, desc: "", thumb: iamge!, scene: scene) } } }).disposed(by: disposeBag) } } DolphinEnglishLearnStudent/Services/Services.swift
@@ -158,6 +158,15 @@ return NetworkRequest.request(params: params, method: .get, progress: true) } class func teamSchedule(type:ListenType,week:Int,day:Int)->Observable<BaseResponse<TeamScheduleModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/teamSchedule") params.append(key: "type", value: type.rawValue) params.append(key: "week", value: week) params.append(key: "day", value: day) return NetworkRequest.request(params: params, method: .get, progress: false) } class func parentPage()->Observable<BaseResponse<String>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/user/studyPage") @@ -200,7 +209,7 @@ class func goodRecommend()->Observable<BaseResponse<[RecommendModel]>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/study/goodRecommend") return NetworkRequest.request(params: params, method: .get, progress: false) return NetworkRequest.request(params: params, method: .get, progress: false,ignoreAlert: true) } class func goodsList(keywords:String,page:Int,pageSize:Int = 20,type:[String])->Observable<BaseResponse<BaseResponseList<MarketModel>>>{ @@ -379,6 +388,12 @@ params.interface(url: "/study/base/user/shareInfo") return NetworkRequest.request(params: params, method: .get, progress: false) } class func vipInfo()->Observable<BaseResponse<SimpleModel>>{ let params = ParamsAppender.build(url: All_Url) params.interface(url: "/study/base/user/vipInfo") return NetworkRequest.request(params: params, method: .post, progress: false) } } extension Services{