// // VIPCourseGroupViewController.m // KulexiuForStudent // // Created by 王智 on 2024/11/13. // #import "VIPCourseGroupViewController.h" #import "CourseGroupNavView.h" #import "JXCategoryView.h" #import "JXPagerListRefreshView.h" #import "ProgramCourseInfoView.h" #import "ProgramCourseGroupBodyView.h" #import "StudentCourseGroupDetailModel.h" @interface VIPCourseGroupViewController () @property (nonatomic, strong) NSMutableArray *listViewArray; @property (nonatomic, strong) CourseGroupNavView *navView; @property (nonatomic, assign) NSInteger headHeight; @property (nonatomic, assign) NSInteger topViewHeight; @property (nonatomic, strong) ProgramCourseInfoView *infoView; @property (nonatomic, assign) BOOL isFirstLoad; @property (nonatomic, strong) StudentCourseGroupDetailModel *detailModel; @property (nonatomic, assign) NSInteger enterStartTime; // 开课前可进入时间配置(分钟) @property (nonatomic, assign) NSInteger quitEndTime; // 结束后退出时间配置(分钟) @property (nonatomic, strong) UIImageView *bgImageView; @end @implementation VIPCourseGroupViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.ks_prefersNavigationBarHidden = YES; [self configUI]; self.isFirstLoad = YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(forceScroll) name:@"UITextViewScroll" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enableScroll) name:@"UITextViewEndScroll" object:nil]; } - (void)forceScroll { self.pagerView.mainTableView.scrollEnabled = NO; } - (void)enableScroll { self.pagerView.mainTableView.scrollEnabled = YES; } - (void)configUI { [self.scrollView removeFromSuperview]; UIImage *bgImage = [UIImage imageNamed:@"courseDetail_bg"]; NSInteger height = (NSInteger)(bgImage.size.height / bgImage.size.width * KPortraitWidth); self.bgImageView = [[UIImageView alloc] initWithImage:bgImage]; self.bgImageView.frame = CGRectMake(0, 0, KPortraitWidth, height); [self.view addSubview:self.bgImageView]; [self.view addSubview:self.navView]; CGFloat navHeight = [CourseGroupNavView getViewHeight]; [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_equalTo(self.view); make.height.mas_equalTo(navHeight); }]; self.headHeight = CGFLOAT_MIN; self.titles = @[@""]; [self configCategoryView:navHeight]; } - (void)requestCourseInfo { [KSNetworkingManager getCourseGroupDetailRequest:KS_POST courseGroupId:self.courseGroupId success:^(NSDictionary * _Nonnull dic) { if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) { NSDictionary *parm = [dic ks_dictionaryValueForKey:@"data"]; self.detailModel = [[StudentCourseGroupDetailModel alloc] initWithDictionary:parm]; // 配置信息 NSDictionary *config = [[dic ks_dictionaryValueForKey:@"data"] ks_dictionaryValueForKey:@"sysConfig"]; self.enterStartTime = [config ks_integerValueForKey:@"vipStartTime"]; self.quitEndTime = [config ks_integerValueForKey:@"vipEndTime"]; } else { [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY]; } [self refreshHeadView]; } faliure:^(NSError * _Nonnull error) { [self refreshHeadView]; }]; } - (void)refreshHeadView { [self refreshListPage]; self.topViewHeight = [ProgramCourseInfoView getViewHeightWithPlanString:self.detailModel.coursePlan]; [self.infoView configWithSource:self.detailModel]; [self.pagerView resizeTableHeaderViewHeightWithAnimatable:NO duration:0.3f curve:UIViewAnimationCurveEaseInOut]; } - (void)configCategoryView:(NSInteger)topHeight { _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, topHeight, KPortraitWidth, self.headHeight)]; self.categoryView.titles = self.titles; self.categoryView.delegate = self; self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f]; self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:16.0f weight:UIFontWeightSemibold]; self.categoryView.titleSelectedColor = HexRGB(0x333333); self.categoryView.titleColor = HexRGB(0x666666); self.categoryView.titleColorGradientEnabled = YES; _pagerView = [self preferredPagingView]; self.pagerView.frame = CGRectMake(0, topHeight, KPortraitWidth, KPortraitHeight - topHeight); self.pagerView.backgroundColor = [UIColor clearColor]; self.pagerView.mainTableView.backgroundColor = [UIColor clearColor]; self.pagerView.listContainerView.backgroundColor = [UIColor clearColor]; // self.pagerView.mainTableView.gestureDelegate = self; self.categoryView.listContainer = (id)self.pagerView.listContainerView; self.pagerView.listContainerView.listCellBackgroundColor = [UIColor clearColor]; [self.view addSubview:self.pagerView]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0); } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.interactivePopGestureRecognizer.enabled = YES; // 刷新课程详情 [self requestCourseInfo]; if (self.isFirstLoad == NO) { [self refreshListPage]; } self.isFirstLoad = NO; } - (void)refreshListPage { id value = self.listViewArray[0]; if ([value isKindOfClass:[ProgramCourseGroupBodyView class]]) { ProgramCourseGroupBodyView *listView = (ProgramCourseGroupBodyView *)value; listView.enterStartTime = self.enterStartTime; listView.quitEndTime = self.quitEndTime; [listView beginFirstRefresh]; } } - (JXPagerView *)preferredPagingView { return [[JXPagerListRefreshView alloc] initWithDelegate:self]; } #pragma mark - JXPagerViewDelegate - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { return self.infoView; } - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { return self.topViewHeight; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return self.headHeight; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return self.categoryView; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { //和categoryView的item数量一致 return self.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index { ProgramCourseGroupBodyView *listView = [[ProgramCourseGroupBodyView alloc] init]; listView.naviController = self.navigationController; listView.selectIndex = index; listView.courseGroupId = self.courseGroupId; listView.courseType = COURSE_GROUP_TYPE_VIP; [self.listViewArray replaceObjectAtIndex:index withObject:listView]; self.listViewArray[index] = listView; [listView beginFirstRefresh]; return listView; } - (void)pagerView:(JXPagerView *)pagerView mainTableViewDidScroll:(UIScrollView *)scrollView { NSLog(@"sscroll content offset y %f", scrollView.contentOffset.y); CGFloat height = self.topViewHeight; CGFloat space = scrollView.contentOffset.y; if (space > 100) { CGFloat rate = (space - 100) / (height - 100); NSLog(@"rate ---------%f",rate); self.navView.backgroundColor = HexRGBAlpha(0xffffff, rate); if (rate == 1) { self.bgImageView.hidden = YES; } else { self.bgImageView.hidden = NO; } } else { self.navView.backgroundColor = [UIColor clearColor]; self.bgImageView.hidden = NO; } } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark ----- lazying - (CourseGroupNavView *)navView { if (!_navView) { _navView = [CourseGroupNavView sharedInstance]; MJWeakSelf; [_navView configWithNavTitle:@"课程组详情" callback:^{ [weakSelf backAction]; }]; } return _navView; } - (NSMutableArray *)listViewArray { if (!_listViewArray) { _listViewArray = [NSMutableArray arrayWithArray:@[@""]]; } return _listViewArray; } - (ProgramCourseInfoView *)infoView { if (!_infoView) { _infoView =[ProgramCourseInfoView sharedInstance]; } return _infoView; } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end