fix
杨锴
2025-06-16 3fa53409f5132333ce6d83fff796e108ddd62090
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift
@@ -11,177 +11,177 @@
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)
    }
}