// // XPPartyViewController.m // xplan-ios // // Created by XY on 2023/3/6. // #import "XPPartyViewController.h" ///Third #import #import #import #import ///Tool #import "ThemeColor.h" #import "XPMacro.h" #import "XPWeakTimer.h" #import "NSArray+Safe.h" #import "Api+Home.h" #import "AccountInfoStorage.h" /// View #import "XPPartyHeaderView.h" /// VC #import "XPPartyListViewController.h" #import "XPHomeLittleGameViewController.h" #import "XPWebViewController.h" #import "XPRoomViewController.h" ///P #import "XPHomeContainerPresenter.h" #import "XPHomeContainerProtocol.h" ///Model #import "HomeTagModel.h" #import "HomePlayRoomModel.h" @interface XPPartyViewController () { NSTimer * timer; } ///分页控制器 @property (nonatomic, strong) JXCategoryTitleView *titleView; @property (nonatomic, strong) JXPagerView *pagingView; @property (nonatomic, strong) NSArray *titles; ///分页控制器头部 @property (nonatomic, strong) XPPartyHeaderView *headerView; ///tag的列表 @property (nonatomic,copy) NSArray *tagList; @end @implementation XPPartyViewController - (XPHomeContainerPresenter *)createPresenter { return [[XPHomeContainerPresenter alloc] init]; } - (BOOL)isHiddenNavBar { return YES; } - (void)viewDidLoad { [super viewDidLoad]; [self initSubViews]; [self addTimer]; [self initHeaderAndFooterRrfresh]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (timer) { [timer setFireDate:[NSDate distantPast]]; //很远的过去 } } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if (timer) { //关闭定时器 [timer setFireDate:[NSDate distantFuture]]; //很远的将来 } } - (void)addTimer { timer = [XPWeakTimer scheduledTimerWithTimeInterval:15 block:^(id userInfo) { [self headerRefresh]; } userInfo:nil repeats:YES]; } #pragma mark - InitHttp - (void)headerRefresh { [self.presenter getHomeTagList]; [self requestBanner]; } - (void)initHeaderAndFooterRrfresh { MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)]; header.stateLabel.font = [UIFont systemFontOfSize:10.0]; header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0]; header.stateLabel.textColor = [ThemeColor secondTextColor]; header.lastUpdatedTimeLabel.textColor = [ThemeColor secondTextColor]; self.pagingView.mainTableView.mj_header = header; } - (void)requestBanner { NSString * uid = [AccountInfoStorage instance].getUid; [Api homePlayGameTeam:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { NSArray *array = [HomePlayRoomModel modelsWithArray:data.data]; for (HomePlayRoomModel *model in array) { if (model.isBanner) { self.headerView.bannerList = model.bannerVoList; break; } } }else{ } } uid:uid pageNum:@"1" pageSize:@"20"]; } #pragma mark - Private Method - (void)initSubViews { [self.view addSubview:self.pagingView]; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGRect frame = self.view.bounds; frame.origin.y = kStatusBarHeight; frame.size.height = frame.size.height - frame.origin.y; self.pagingView.frame = frame; } #pragma mark - XPHomeContainerProtocol - (void)getHomeTagListSuccess:(NSArray *)array { [self.pagingView.mainTableView.mj_header endRefreshing]; NSMutableArray *tempArr = [array mutableCopy]; if (tempArr.count > 0 ) { NSString *firstName = array.firstObject.name; if (![firstName isEqualToString:@"推荐"]) { HomeTagModel *recommend = [[HomeTagModel alloc] init]; recommend.name = @"推荐"; recommend.tid = @"recommend"; if ([firstName isEqualToString:@"喜欢"]) { [tempArr replaceObjectAtIndex:0 withObject:recommend]; }else{ [tempArr insertObject:recommend atIndex:0]; } } } self.tagList = tempArr; NSMutableArray * titles = [NSMutableArray array]; [self.tagList enumerateObjectsUsingBlock:^(HomeTagModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.name.length > 0) { [titles addObject:obj.name]; } }]; self.titles = titles.copy; self.titleView.titles = self.titles; [self.titleView reloadData]; } #pragma mark - XPPartyHeaderViewDelegate /// 点击banner - (void)partyHeaderViewClickBanner:(HomeBannerInfoModel *)banner { switch (banner.skipType) { case HomeBannerInfoSkipType_Room: { if (banner.skipUri.length > 0) { [XPRoomViewController openRoom:banner.skipUri viewController:self]; } } break; case HomeBannerInfoSkipType_Web: { XPWebViewController *vc = [[XPWebViewController alloc]init]; vc.url = banner.skipUri; [self.navigationController pushViewController:vc animated:YES]; } break; default: break; } } #pragma mark - JXCategoryViewDelegate - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { return [XPPartyHeaderView getPartyHeaderViewHeight]; } - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { return self.headerView; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return 50; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return self.titleView; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { return self.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index { HomeTagModel *tag = [self.tagList safeObjectAtIndex1:index]; if ([tag.name isEqualToString:@"小游戏"]) { XPHomeLittleGameViewController * likeVC = [[XPHomeLittleGameViewController alloc] init]; return (id )likeVC; } else { XPPartyListViewController *listVC = [[XPPartyListViewController alloc] init]; listVC.tabId = tag.tid; return (id )listVC; } } #pragma mark - Getters And Setters - (JXCategoryTitleView *)titleView { if (!_titleView) { _titleView = [[JXCategoryTitleView alloc] init]; _titleView.delegate = self; _titleView.backgroundColor = [UIColor clearColor]; _titleView.titleColor = [ThemeColor textThirdColor]; _titleView.titleSelectedColor = [ThemeColor mainTextColor]; _titleView.titleFont = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; _titleView.titleSelectedFont = [UIFont systemFontOfSize:16 weight:UIFontWeightSemibold]; _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; _titleView.defaultSelectedIndex = 0; _titleView.averageCellSpacingEnabled = NO; _titleView.titles = self.titles; _titleView.cellSpacing = 20; _titleView.listContainer = (id)self.pagingView.listContainerView; JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init]; lineView.indicatorImageViewSize = CGSizeMake(13, 4); lineView.verticalMargin = 5; lineView.indicatorImageView.image = [UIImage imageNamed:@"home_segment_indicator"]; _titleView.indicators = @[lineView]; } return _titleView; } - (JXPagerView *)pagingView { if (!_pagingView) { _pagingView = [[JXPagerView alloc] initWithDelegate:self]; _pagingView.backgroundColor = [UIColor clearColor]; _pagingView.listContainerView.backgroundColor = [UIColor clearColor]; _pagingView.mainTableView.backgroundColor = [UIColor clearColor]; _pagingView.listContainerView.listCellBackgroundColor = UIColor.clearColor; } return _pagingView; } - (XPPartyHeaderView *)headerView { if (!_headerView) { _headerView = [[XPPartyHeaderView alloc] init]; _headerView.delegate = self; } return _headerView; } @end