Files
yinmeng-ios/xplan-ios/Main/Home/View/XPPartyViewController.m
2023-08-29 17:54:23 +08:00

297 lines
9.1 KiB
Objective-C

//
// XPPartyViewController.m
// xplan-ios
//
// Created by XY on 2023/3/6.
//
#import "XPPartyViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <JXCategoryView.h>
#import <JXPagerView.h>
#import <MJRefresh.h>
///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"
#import "XPTeenagerHomeView.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 ()<JXCategoryViewDelegate,JXPagerViewDelegate,XPHomeContainerProtocol,XPPartyHeaderViewDelegate>
{
NSTimer * timer;
}
///分页控制器
@property (nonatomic, strong) JXCategoryTitleView *titleView;
@property (nonatomic, strong) JXPagerView *pagingView;
@property (nonatomic, strong) NSArray<NSString *> *titles;
///分页控制器头部
@property (nonatomic, strong) XPPartyHeaderView *headerView;
///tag的列表
@property (nonatomic,copy) NSArray<HomeTagModel *> *tagList;
///青少年空白view
@property (nonatomic, strong) XPTeenagerHomeView *teenagerView;
@end
@implementation XPPartyViewController
@synthesize parentMode = _parentMode;
- (XPHomeContainerPresenter *)createPresenter {
return [[XPHomeContainerPresenter alloc] init];
}
- (BOOL)isHiddenNavBar {
return YES;
}
- (void)setParentMode:(BOOL)parentMode {
_parentMode = parentMode;
if (parentMode) {
if (!self.teenagerView.superview) {
[self.view addSubview:self.teenagerView];
[self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
} else {
[self.teenagerView removeFromSuperview];
}
}
- (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 {
if (_parentMode) return;
[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;
}
}
[self hideHUD];
[self.pagingView reloadData];
}else{
}
} uid:uid pageNum:@"1" pageSize:@"20"];
}
#pragma mark - Private Method
- (void)initSubViews {
self.view.backgroundColor = UIColor.whiteColor;
[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<HomeTagModel *> *)array {
[self.pagingView.mainTableView.mj_header endRefreshing];
NSMutableArray<HomeTagModel *> *tempArr = [array mutableCopy];
if (tempArr) {
HomeTagModel *recommend = [[HomeTagModel alloc] init];
recommend.name = @"热门";
recommend.tid = @"recommend";
[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 {
if(self.headerView.bannerList.count == 0)return 0;
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<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
HomeTagModel *tag = [self.tagList safeObjectAtIndex1:index];
if ([tag.name isEqualToString:@"小游戏"]) {
XPHomeLittleGameViewController * likeVC = [[XPHomeLittleGameViewController alloc] init];
return (id <JXPagerViewListViewDelegate>)likeVC;
} else {
XPPartyListViewController *listVC = [[XPPartyListViewController alloc] init];
listVC.tabId = tag.tid;
return (id <JXPagerViewListViewDelegate>)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<JXCategoryViewListContainer>)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;
}
- (XPTeenagerHomeView *)teenagerView {
if (!_teenagerView) {
_teenagerView = [[XPTeenagerHomeView alloc] init];
}
return _teenagerView;
}
@end