// // YMRankingViewController.m // MSYOUPAI // // Created by YoMi on 2024/2/4. // Copyright © 2024 MS. All rights reserved. // #import "YMRankingViewController.h" #import "JXCategoryView.h" #import "JXPagerView.h" #import "YMRankingViewModel.h" #import "YMRankingListViewController.h" @interface YMRankingViewController () /// 排行榜VM @property (nonatomic, strong) YMRankingViewModel *viewModel; /// 分类标题视图 @property (nonatomic, strong) JXCategoryTitleView *categoryView; /// 分类分页视图 @property (nonatomic, strong) JXPagerListRefreshView *pagerView; @property (nonatomic, strong) JXCategoryIndicatorImageView *indicatorImageView; @end @implementation YMRankingViewController @dynamic viewModel; - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } - (void)viewDidLoad { [super viewDidLoad]; self.ym_navigationStyle = YMBaseNavigationStyleClearBgWhiteBackArrow; // [self.view ym_setGradientBackgroundWithColors:kMainGradColors locations:kMainGradLocation startPoint:kMainGradStartP endPoint:kMainGradEndP]; // self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"ym_ranking_top_bg"]]; // self.view.backgroundColor = [UIColor colorWithPatternImage: [self imageResize:[UIImage imageNamed:@"ym_ranking_top_bg"] andResizeTo:self.view.frame.size]]; self.view.backgroundColor = UIColor.whiteColor;//HexColorFromRGB(0xFDA0F1); //self.view.backgroundColor = [UIColor colorWithPatternImage: [self imageResize:[UIImage imageNamed:@"ym_ranking_bg_img"] andResizeTo:self.view.frame.size]]; UIImageView *imgv = [[UIImageView alloc] initWithImage:ImageByName(@"ym_ranking_top_bg")]; imgv.frame = CGRectMake(0, 0, KScreenWidth, adapt(480)); [self.view insertSubview:imgv belowSubview:self.ym_customNavView]; // UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, adapt(333))]; // view.backgroundColor = HexColorFromRGB(0xFDA0F1); // [self.view insertSubview:view belowSubview:imgv]; // // { // UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, adapt(333), KScreenWidth, KScreenHeight - adapt(333))]; // view.backgroundColor = HexColorFromRGB(0xD3F9F3); // [self.view insertSubview:view belowSubview:imgv]; // } } -(UIImage *)imageResize :(UIImage*)img andResizeTo:(CGSize)newSize { CGFloat scale = [[UIScreen mainScreen]scale]; //UIGraphicsBeginImageContext(newSize); // 传入的View.frame.size是0的话,直接返回nil,防止 UIGraphicsBeginImageContext() 传入0,导致崩溃 if (CGSizeEqualToSize(newSize, CGSizeZero)) { return nil; } UIGraphicsBeginImageContextWithOptions(newSize, NO, scale); [img drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0); } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navigationController.interactivePopGestureRecognizer.enabled = YES; } - (void)ym_setupViews { UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 44)]; [titleView addSubview:self.categoryView]; self.categoryView.center = titleView.center; self.ym_customNavView.ym_customNavItem.titleView = titleView; self.categoryView.indicators = @[self.indicatorImageView]; [self.view addSubview:self.pagerView]; [self.view setNeedsUpdateConstraints]; [self.view updateConstraintsIfNeeded]; } - (void)updateViewConstraints { [self.pagerView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(kYMNavHeight); make.left.equalTo(self.view); make.right.equalTo(self.view); make.bottom.equalTo(self.view); }]; [super updateViewConstraints]; } - (JXCategoryIndicatorImageView *)indicatorImageView{ if(!_indicatorImageView){ _indicatorImageView = [[JXCategoryIndicatorImageView alloc] init]; //_indicatorImageView.indicatorImageView.image = [UIImage imageNamed:@"home_indicator_img"]; _indicatorImageView.indicatorImageViewSize = CGSizeMake(adapt(68), 44); UIImageView *indicatorImgv = [[UIImageView alloc] init]; indicatorImgv.image = [UIImage imageNamed:@"ym_ranking_tab_bg"]; indicatorImgv.contentMode = UIViewContentModeScaleAspectFit; [_indicatorImageView addSubview:indicatorImgv]; [indicatorImgv mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self->_indicatorImageView); make.bottom.equalTo(self->_indicatorImageView).offset(adapt(-3)); make.width.mas_equalTo(40); make.height.mas_equalTo(8); }]; } return _indicatorImageView; } - (JXCategoryTitleView *)categoryView{ if (!_categoryView) { _categoryView = [[JXCategoryTitleView alloc]initWithFrame:CGRectMake(0, 0, adapt(165), 44)]; _categoryView.delegate = self; _categoryView.titles = [self.viewModel.mainCategoryVMDataArray.rac_sequence map:^id _Nullable(YMRankingListMainCategoryViewModel * _Nullable viewModel) { return viewModel.customNavTitle; }].array; _categoryView.titleLabelZoomEnabled = NO; _categoryView.titleColorGradientEnabled = YES; _categoryView.titleColor = HexColorFromRGBA(0xFFFFFF, 0.5); _categoryView.titleSelectedColor = HexColorFromRGBA(0xFFFFFF, 1); _categoryView.titleFont = LCBoldFont(17); _categoryView.titleSelectedFont = LCBoldFont(18); _categoryView.averageCellSpacingEnabled = YES; _categoryView.cellSpacing = adapt(5); //_categoryView.contentEdgeInsetLeft = adapt(80); //_categoryView.contentEdgeInsetRight = adapt(80); _categoryView.contentScrollViewClickTransitionAnimationEnabled = YES; _categoryView.listContainer = (id)self.pagerView.listContainerView; } return _categoryView; } - (JXPagerListRefreshView*)pagerView{ if (!_pagerView) { //需要下拉刷新则要这个代理给设置出来 _pagerView = [[JXPagerListRefreshView alloc] initWithDelegate:self]; // _pagerView = [[JXPagerView alloc]initWithDelegate:self]; _pagerView.mainTableView.gestureDelegate = self; _pagerView.mainTableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; _pagerView.mainTableView.backgroundColor = UIColor.clearColor; _pagerView.listContainerView.listCellBackgroundColor = UIColor.clearColor; //当有头部视图的时候设置固定高度 // _pagerView.pinSectionHeaderVerticalOffset = 50; //关闭弹簧效果 // _pagerView.mainTableView.bounces = NO; } return _pagerView; } - (void)ym_bindViewModel { } - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { return CGFLOAT_MIN; } - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { return [UIView new]; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return CGFLOAT_MIN; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return [UIView new]; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { return self.categoryView.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index{ YMRankingListViewController *listVC = [[YMRankingListViewController alloc]initWithViewModel:self.viewModel.mainCategoryVMDataArray[index]]; return listVC; } #pragma mark - JXCategoryViewDelegate - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index { self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0); } - (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index { } - (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index { } #pragma mark - JXPagerMainTableViewGestureDelegate - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([self checkIsNestContentScrollView:(UIScrollView *)gestureRecognizer.view] || [self checkIsNestContentScrollView:(UIScrollView *)otherGestureRecognizer.view]) { //如果交互的是嵌套的contentScrollView,证明在左右滑动,就不允许同时响应 return NO; } return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]; } - (BOOL)checkIsNestContentScrollView:(UIScrollView *)scrollView { for (YMRankingListViewController *list in self.pagerView.validListDict.allValues) { if (list.contentScrollView == scrollView) { return YES; } } return NO; } @end