| | |
| | | |
| | | class HomeListenVC: BaseVC { |
| | | |
| | | //限制后面的点击:天数(1开始) |
| | | private var limitDay = 1 |
| | | private var quarter:Int! |
| | | private var week:Int! |
| | | private var studyScheduleModel:StudyScheduleModel! |
| | | //限制后面的点击:天数(1开始) |
| | | private var limitDay = 1 |
| | | private var quarter:Int! |
| | | private var week:Int! |
| | | private var studyScheduleModel:StudyScheduleModel! |
| | | |
| | | private lazy var menu:SPPageMenu = { |
| | | let menu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | menu.itemTitleFont = UIFont(name: "Impact", size: 18) ?? .systemFont(ofSize: 18, weight: .medium) |
| | | menu.setItems(["Day1","Day2","Day3","Day4","Day5","自主游戏","听故事"], selectedItemIndex: 0) |
| | | menu.selectedItemTitleColor = UIColor(hexStr: "#41A2EB") |
| | | menu.unSelectedItemTitleColor = UIColor.black.withAlphaComponent(0.71) |
| | | menu.trackerWidth = 22 |
| | | menu.setTrackerHeight(6, cornerRadius: 3) |
| | | menu.trackerFollowingMode = .half |
| | | menu.tracker.image = UIImage.jq_image(with: UIColor(hexStr: "#41A2EB"), size: CGSize(width: 1, height: 1), alpha: 1) |
| | | menu.permutationWay = .notScrollAdaptContent |
| | | menu.dividingLineHeight = 0.001 |
| | | return menu |
| | | }() |
| | | private lazy var menu:SPPageMenu = { |
| | | let menu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | | menu.itemTitleFont = UIFont(name: "Impact", size: 18) ?? .systemFont(ofSize: 18, weight: .medium) |
| | | menu.setItems(["Day1","Day2","Day3","Day4","Day5","自主游戏","听故事"], selectedItemIndex: 0) |
| | | menu.selectedItemTitleColor = UIColor(hexStr: "#41A2EB") |
| | | menu.unSelectedItemTitleColor = UIColor.black.withAlphaComponent(0.71) |
| | | menu.trackerWidth = 22 |
| | | menu.setTrackerHeight(6, cornerRadius: 3) |
| | | menu.trackerFollowingMode = .half |
| | | menu.tracker.image = UIImage.jq_image(with: UIColor(hexStr: "#41A2EB"), size: CGSize(width: 1, height: 1), alpha: 1) |
| | | menu.permutationWay = .notScrollAdaptContent |
| | | menu.dividingLineHeight = 0.001 |
| | | return menu |
| | | }() |
| | | |
| | | private lazy var pageVC:FFPageViewController = { |
| | | let vc = FFPageViewController() |
| | | vc.scrollview.isScrollEnabled = false |
| | | return vc |
| | | }() |
| | | private lazy var pageVC:FFPageViewController = { |
| | | let vc = FFPageViewController() |
| | | vc.scrollview.isScrollEnabled = false |
| | | return vc |
| | | }() |
| | | |
| | | required init(quarter:Int,week:Int,studyScheduleModel:StudyScheduleModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.quarter = quarter |
| | | self.week = week |
| | | self.studyScheduleModel = studyScheduleModel |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | required init(quarter:Int,week:Int,studyScheduleModel:StudyScheduleModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.quarter = quarter |
| | | self.week = week |
| | | self.studyScheduleModel = studyScheduleModel |
| | | } |
| | | |
| | | refreshDay() |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | Services.onlineDuration().subscribe(onNext: { data in |
| | | if let time = data.data{ |
| | | sceneDelegate?.globalTimeval = time |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | private func refreshDay(){ |
| | | self.limitDay = studyScheduleModel.day |
| | | refreshDay() |
| | | |
| | | let total = studyScheduleModel.pair + studyScheduleModel.induction + studyScheduleModel.listen + studyScheduleModel.look + studyScheduleModel.answer |
| | | Services.onlineDuration().subscribe(onNext: { data in |
| | | if let time = data.data{ |
| | | sceneDelegate?.globalTimeval = time |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | if self.limitDay == 5 && total == 500 { |
| | | self.limitDay = 6 |
| | | } |
| | | private func refreshDay(){ |
| | | self.limitDay = studyScheduleModel.day |
| | | |
| | | for (index,titleL) in (self.menu.subviews.last?.subviews[1].subviews ?? []).filter({$0 is UIButton}).enumerated(){ |
| | | if let btn = titleL as? UIButton{ |
| | | if index == 6{ //听故事,单独使用 |
| | | btn.setTitleColor(.black, for: .normal) |
| | | self.menu.setEnabled(true, forItemAt: UInt(index)) |
| | | }else{ |
| | | btn.setTitleColor(index < (self.limitDay) ? .black:.black.withAlphaComponent(0.33), for: .normal) |
| | | self.menu.setEnabled(index < (self.limitDay), forItemAt: UInt(index)) |
| | | } |
| | | } |
| | | } |
| | | self.pageVC.reloadData() |
| | | let total = studyScheduleModel.pair + studyScheduleModel.induction + studyScheduleModel.listen + studyScheduleModel.look + studyScheduleModel.answer |
| | | |
| | | #if !DEBUG |
| | | if limitDay == 6{ |
| | | self.pageVC.scroll(toPage: 4, animation: true) |
| | | }else{ |
| | | self.pageVC.scroll(toPage: self.limitDay - 1, animation: true) |
| | | } |
| | | #endif |
| | | } |
| | | if self.limitDay == 5 && total == 500 { |
| | | self.limitDay = 6 |
| | | } |
| | | |
| | | override func setUI() { |
| | | super.setUI() |
| | | for (index,titleL) in (self.menu.subviews.last?.subviews[1].subviews ?? []).filter({$0 is UIButton}).enumerated(){ |
| | | if let btn = titleL as? UIButton{ |
| | | if index == 6{ //听故事,单独使用 |
| | | btn.setTitleColor(.black, for: .normal) |
| | | self.menu.setEnabled(true, forItemAt: UInt(index)) |
| | | }else{ |
| | | btn.setTitleColor(index < (self.limitDay) ? .black:.black.withAlphaComponent(0.33), for: .normal) |
| | | self.menu.setEnabled(index < (self.limitDay), forItemAt: UInt(index)) |
| | | } |
| | | } |
| | | } |
| | | self.pageVC.reloadData() |
| | | |
| | | //解决返回按钮区域过小,点击不灵敏 |
| | | title = " " |
| | | #if !DEBUG |
| | | if limitDay == 6{ |
| | | self.pageVC.scroll(toPage: 4, animation: true) |
| | | }else{ |
| | | self.pageVC.scroll(toPage: self.limitDay - 1, animation: true) |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | let topMenuView = UIView() |
| | | topMenuView.backgroundColor = .white |
| | | topMenuView.jq_cornerRadius = 8 |
| | | view.addSubview(topMenuView) |
| | | topMenuView.snp.makeConstraints { make in |
| | | make.top.equalTo(self.view.safeAreaLayoutGuide).offset(9) |
| | | make.left.equalTo(234) |
| | | make.right.equalTo(-234) |
| | | make.height.equalTo(59) |
| | | } |
| | | override func setUI() { |
| | | super.setUI() |
| | | |
| | | menu.delegate = self |
| | | topMenuView.addSubview(menu) |
| | | menu.snp.makeConstraints { make in |
| | | make.left.right.equalToSuperview() |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(32) |
| | | } |
| | | //解决返回按钮区域过小,点击不灵敏 |
| | | title = " " |
| | | |
| | | let topMenuView = UIView() |
| | | topMenuView.backgroundColor = .white |
| | | topMenuView.jq_cornerRadius = 8 |
| | | view.addSubview(topMenuView) |
| | | topMenuView.snp.makeConstraints { make in |
| | | make.top.equalTo(self.view.safeAreaLayoutGuide).offset(9) |
| | | make.left.equalTo(234) |
| | | make.right.equalTo(-234) |
| | | make.height.equalTo(59) |
| | | } |
| | | |
| | | menu.delegate = self |
| | | topMenuView.addSubview(menu) |
| | | menu.snp.makeConstraints { make in |
| | | make.left.right.equalToSuperview() |
| | | make.centerY.equalToSuperview() |
| | | make.height.equalTo(32) |
| | | } |
| | | |
| | | |
| | | pageVC.delegate = self |
| | | view.addSubview(pageVC.view) |
| | | pageVC.view.snp.makeConstraints { make in |
| | | make.top.equalTo(menu.snp.bottom).offset(19) |
| | | make.left.equalTo(topMenuView.snp.left) |
| | | make.right.equalTo(topMenuView.snp.right) |
| | | make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom) |
| | | } |
| | | pageVC.delegate = self |
| | | view.addSubview(pageVC.view) |
| | | pageVC.view.snp.makeConstraints { make in |
| | | make.top.equalTo(menu.snp.bottom).offset(19) |
| | | make.left.equalTo(topMenuView.snp.left) |
| | | make.right.equalTo(topMenuView.snp.right) |
| | | make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom) |
| | | } |
| | | |
| | | for (index,titleL) in (self.menu.subviews.last?.subviews[1].subviews ?? []).filter({$0 is UIButton}).enumerated(){ |
| | | if index >= (self.limitDay - 1){ |
| | | if let btn = titleL as? UIButton{ |
| | | btn.setTitleColor(.black.withAlphaComponent(0.33), for: .normal) |
| | | self.menu.setEnabled(false, forItemAt: UInt(index)) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | for (index,titleL) in (self.menu.subviews.last?.subviews[1].subviews ?? []).filter({$0 is UIButton}).enumerated(){ |
| | | if index >= (self.limitDay - 1){ |
| | | if let btn = titleL as? UIButton{ |
| | | btn.setTitleColor(.black.withAlphaComponent(0.33), for: .normal) |
| | | self.menu.setEnabled(false, forItemAt: UInt(index)) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(StudyCompleteNextLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in |
| | | guard let weakSelf = self else { return } |
| | | if let type = noti.object as? ListenType{ |
| | | let homelistenSubVC = weakSelf.pageVC.currentController as! HomeListenSubVC |
| | | homelistenSubVC.jumpAt(listenType: type) |
| | | } |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(StudyCompleteNextLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in |
| | | guard let weakSelf = self else { return } |
| | | if let type = noti.object as? ListenType{ |
| | | let homelistenSubVC = weakSelf.pageVC.currentController as! HomeListenSubVC |
| | | homelistenSubVC.jumpAt(listenType: type) |
| | | } |
| | | |
| | | }).disposed(by: disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | |
| | | NotificationCenter.default.rx.notification(Refresh_ListenSchedule_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] _ in |
| | | guard let weakSelf = self else { return } |
| | | Services.studySchedule(week: weakSelf.week).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.studyScheduleModel = data.data |
| | | NotificationCenter.default.rx.notification(Refresh_ListenSchedule_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] _ in |
| | | guard let weakSelf = self else { return } |
| | | Services.studySchedule(week: weakSelf.week).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.studyScheduleModel = data.data |
| | | |
| | | for subVC in weakSelf.pageVC.children as! [HomeListenSubVC]{ |
| | | subVC.studyScheduleModel = weakSelf.studyScheduleModel |
| | | subVC.tableView.reloadData() |
| | | } |
| | | for subVC in weakSelf.pageVC.children as! [HomeListenSubVC]{ |
| | | subVC.studyScheduleModel = weakSelf.studyScheduleModel |
| | | subVC.tableView.reloadData() |
| | | } |
| | | |
| | | weakSelf.refreshDay() |
| | | weakSelf.refreshDay() |
| | | |
| | | |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | extension HomeListenVC:SPPageMenuDelegate{ |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageVC.scroll(toPage: index, animation: true) |
| | | } |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | | pageVC.scroll(toPage: index, animation: true) |
| | | } |
| | | } |
| | | |
| | | extension HomeListenVC:FFPageViewControllerDelegate{ |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return menu.numberOfItems |
| | | } |
| | | func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { |
| | | return menu.numberOfItems |
| | | } |
| | | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | menu.selectedItemIndex = currentPage |
| | | } |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | menu.selectedItemIndex = currentPage |
| | | } |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | return HomeListenSubVC(page: page,quarter: quarter,week: week,studyScheduleModel: studyScheduleModel) |
| | | } |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | return HomeListenSubVC(page: page,quarter: quarter,week: week,studyScheduleModel: studyScheduleModel) |
| | | } |
| | | } |