Files
yinmeng-ios/xplan-ios/Main/Home/View/XPNewHomeViewController.m
2023-03-20 18:57:56 +08:00

552 lines
20 KiB
Objective-C

//
// XPNewHomeViewController.m
// xplan-ios
//
// Created by XY on 2023/3/3.
//
#import "XPNewHomeViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <JXCategoryView.h>
#import <JXPagerView.h>
#import <MJRefresh/MJRefresh.h>
#import <ReactiveObjC/ReactiveObjC.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "ThemeColor+Home.h"
#import "XPMacro.h"
#import "XPHtmlURL.h"
#import "XPConstant.h"
#import "Api+Room.h"
#import "AccountInfoStorage.h"
#import "TTPopup.h"
#import "StatisticsServiceHelper.h"
#import "XPWeakTimer.h"
#import "ClientConfig.h"
#import "NSArray+Safe.h"
#import "UIImage+Utils.h"
#import "XPButton.h"
#import "Api+Home.h"
#import "XCHUDTool.h"
///View
#import "XPNewHomeNavView.h"
#import "XPHomeRecommendViewController.h"
#import "XPRoomSearchContainerViewController.h"
#import "XPHomePartyContainerViewController.h"
#import "XPHomePartyViewController.h"
#import "XPWebViewController.h"
#import "XPHomeHotRoomViewController.h"
#import "XPRoomViewController.h"
#import "XPLittleGameRoomOpenView.h"
#import "XPHomeLivesViewController.h"
#import "XPTeenagerHomeView.h"
#import "XPNewHomeHeaderView.h"
#import "XPRoomSearchContainerViewController.h"
#import "XPHomeRecommendOtherRoomView.h"
#import "XPNewHomeFilterView.h"
#import "SessionViewController.h"
#import "XPTeenagerHomeView.h"
///P
#import "XPHomeRecommendPresenter.h"
#import "XPHomeRecommendProtocol.h"
///VC
#import "XPHomeHappyViewController.h"
#import "XPHomeHotRoomViewController.h"
#import "XPFindNewFriendViewController.h"
///Model
#import "HomeMenuInfoModel.h"
#import "HomeMenuSourceModel.h"
#import "XPHomeGiftRecordModel.h"
@class HomeBannerInfoModel,HomeRecommendRoomModel, HomePlayRoomModel;
@interface XPNewHomeViewController ()<JXCategoryViewDelegate,JXPagerViewDelegate, XPHomeRecommendProtocol,JXPagerMainTableViewGestureDelegate, XPNewHomeNavViewDelegate, XPNewHomeHeaderViewDelegate, XPHomeRecommendOtherRoomViewDelegate>
{
NSTimer * timer;
}
@property (nonatomic, strong) UIImageView *topGradientImageView;
///导航栏
@property (nonatomic, strong) XPNewHomeNavView *homeNavView;
///分页控制器
@property (nonatomic, strong) JXCategoryTitleView *titleView;
@property (nonatomic, strong) JXPagerView *pagingView;
@property (nonatomic, strong) NSArray<NSString *> *titles;
@property (nonatomic, strong) UIView *pageHeaderView;
@property (nonatomic, strong) UIStackView *stackView;
///筛选
@property (nonatomic, strong) XPButton *filterBtn;
///换一换
@property (nonatomic, strong) XPButton *refreshBtn;
///筛选下标
@property (nonatomic, assign) NSInteger filterIndex;
///分页控制器头部
@property (nonatomic,strong) XPNewHomeHeaderView *headerView;
///开黑畅聊
@property (nonatomic,strong) XPHomeHappyViewController *personalRoomVC;
///发现新朋友
@property (nonatomic,strong) XPFindNewFriendViewController *friendVC;
///性别
@property (nonatomic,strong) NSString *gender;
///青少年空白view
@property (nonatomic, strong) XPTeenagerHomeView *teenagerView;
@end
@implementation XPNewHomeViewController
@synthesize parentMode = _parentMode;
- (XPHomeRecommendPresenter *)createPresenter {
return [[XPHomeRecommendPresenter 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 initHeaderAndFooterRrfresh];
[self initSubViews];
[self addTimer];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
CGRect frame = self.view.bounds;
frame.origin.y = kNavigationHeight;
frame.size.height = frame.size.height - frame.origin.y;
self.pagingView.frame = frame;
}
- (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]]; //很远的将来
}
}
#pragma mark - InitHttp
- (void)addTimer {
timer = [XPWeakTimer scheduledTimerWithTimeInterval:15 block:^(id userInfo) {
[self timeRefresh];
} userInfo:nil repeats:YES];
}
- (void)timeRefresh {
if (_parentMode) return;
[self.presenter getHomeTopBannerList];
[self.presenter getHomeGiftRecord];
[_personalRoomVC refreshData];
}
- (void)headerRefresh {
if (_parentMode) return;
[self.presenter getHomeTopBannerList];
[self.presenter getHomeGiftRecord];
[_personalRoomVC refreshData];
[_friendVC refreshData:self.gender];
}
- (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;
[self headerRefresh];
}
#pragma mark - Private Method
- (void)initSubViews {
[self.view addSubview:self.topGradientImageView];
[self.view addSubview:self.homeNavView];
[self.view addSubview:self.pagingView];
[self.pageHeaderView addSubview:self.stackView];
[self.stackView addArrangedSubview:self.titleView];
[self.stackView addArrangedSubview:self.refreshBtn];
[self.stackView addArrangedSubview:self.filterBtn];
// ///首页tab 根据服务端的配置
// [RACObserve([ClientConfig shareConfig], configInfo) subscribeNext:^(id _Nullable x) {
// ClientDataModel * model = x;
// if (model.homeTabList.count > 0) {
// if ([model.homeTabList containsObject:@"组队开黑"]) {
// NSMutableArray * temArray = [NSMutableArray arrayWithArray:model.homeTabList];
// NSInteger index = [temArray indexOfObject:@"组队开黑"];
// [temArray replaceObjectAtIndex:index withObject:@"开黑畅聊"];
// [temArray insertObject:@"发现新朋友" atIndex:0];
// model.homeTabList = temArray.copy;
// }
// self.titles = model.homeTabList;
// self.titleView.titles = self.titles;
// [self.titleView reloadData];
// }
// }];
[self.topGradientImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.mas_equalTo(0);
make.height.mas_equalTo(125);
}];
[self.homeNavView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.mas_equalTo(0);
make.height.mas_equalTo(kNavigationHeight);
}];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(15);
make.right.mas_equalTo(-15);
make.top.bottom.mas_equalTo(0);
}];
[self.filterBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(24);
}];
[self.refreshBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(24);
}];
[self.titleView mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(50);
}];
}
#pragma mark - Action
/// 点击筛选
- (void)filterBtnAction {
XPNewHomeFilterView *filterView = [[XPNewHomeFilterView alloc] init];
@weakify(self);
filterView.selectBlock = ^(NSString *gender, NSString *title, NSInteger index) {
@strongify(self);
[self.filterBtn setTitle:title forState:UIControlStateNormal];
// 刷新列表
self.gender = gender;
self.filterIndex = index;
[self.friendVC refreshData:self.gender];
};
[filterView addToVCView:self.view targetView:self.filterBtn selectedIndex:self.filterIndex];
}
/// 点击换一换
- (void)refreshBtnAction {
[_friendVC refreshData:self.gender];
self.refreshBtn.userInteractionEnabled = NO;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.refreshBtn.userInteractionEnabled = YES;
});
}
#pragma mark - XPHomeRecommendProtocol
- (void)getHomeTopBannerListSuccess:(NSArray *)list menuList:(NSArray *)list1{
[self.pagingView.mainTableView.mj_header endRefreshing];
self.headerView.menuList = list1;
}
- (void)getHomeGiftRecordSuccess:(NSArray *)list {
self.headerView.messageList = list;
}
- (void)homeChatPickSuccess:(NSString *)uid {
/// 跳聊天
NSString *sessionId = uid;
NIMSession *session = [NIMSession session:sessionId type:NIMSessionTypeP2P];
SessionViewController *sessionVC = [[SessionViewController alloc] initWithSession:session];
[self.navigationController pushViewController:sessionVC animated:YES];
}
- (void)homeChatPickFail:(NSString *)msg {
}
- (void)getHomeRecommendDataFail {
}
#pragma mark - XPNewHomeNavViewDelegate
- (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickSearch:(UIButton *)sender {
XPRoomSearchContainerViewController * searchVC = [[XPRoomSearchContainerViewController alloc] init];
searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self.navigationController presentViewController:searchVC animated:YES completion:nil];
}
- (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickRank:(UIButton *)sender {
XPWebViewController * webVC =[[XPWebViewController alloc] init];
webVC.url = URLWithType(kHomeRankURL);
[self.navigationController pushViewController:webVC animated:YES];
}
#pragma mark - XPNewHomeHeaderViewDelegate
/// 点击了某个菜单
- (void)homeHeaderViewClickMenu:(HomeMenuInfoModel *)info {
if (info.resourceType == HomeMenuResourceType_H5) {
XPWebViewController * webVC = [[ XPWebViewController alloc] init];
webVC.url = info.resourceContent;
[self.navigationController pushViewController:webVC animated:YES];
}else if (info.resourceType == HomeMenuResourceType_Match) { // 一键匹配的
[self.presenter homeChatPick];
}else {
NSString * uid = [AccountInfoStorage instance].getUid;
if (info.hid.length > 0 && uid.length > 0) {
[Api homePickResource:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
HomeMenuSourceModel * sourceModel = [HomeMenuSourceModel modelWithDictionary:data.data];
if (sourceModel.isPick) {
if (sourceModel.uid.integerValue > 0) {
[XPRoomViewController openRoom:sourceModel.uid fromNick:nil fromType:UserEnterRoomFromType_Home_Recommend fromUid:nil viewController:self];
}
} else {
XPHomeRecommendOtherRoomView * recommendView = [[XPHomeRecommendOtherRoomView alloc] init];
recommendView.delegate = self;
recommendView.roomInfo = sourceModel;
[TTPopup popupView:recommendView style:TTPopupStyleAlert];
}
} else {
[XCHUDTool showErrorWithMessage:msg];
}
} uid:uid rid:info.hid];
}
}
}
/// 点击热门
- (void)homeHeaderViewClickScrollMessage:(XPHomeGiftRecordModel *)info {
if (info.roomUid.length > 0) {
[XPRoomViewController openRoom:info.roomUid fromNick:nil fromType:UserEnterRoomFromType_Home_Recommend fromUid:nil viewController:self];
}
}
#pragma mark - XPHomeRecommendOtherRoomViewDelegate
- (void)xPHomeRecommendOtherRoomView:(XPHomeRecommendOtherRoomView *)view didClickEnterRoom:(HomeMenuSourceModel *)model {
if (model.uid.integerValue > 0) {
[XPRoomViewController openRoom:model.uid fromNick:nil fromType:UserEnterRoomFromType_Home_Recommend fromUid:nil viewController:self];
}
}
#pragma mark - JXCategoryViewDelegate
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
return [XPNewHomeHeaderView getHeaderViewHeight];
}
- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
return self.headerView;
}
- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return 50;
}
- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return self.pageHeaderView;
}
- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
return self.titles.count;
}
- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
UIViewController *viewController;
if (index == 0) {
viewController = self.friendVC;
}else{
viewController = self.personalRoomVC;
}
return (id <JXPagerViewListViewDelegate>)viewController;
}
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
if (index == 0) {
// 调整标题UI
self.refreshBtn.hidden = NO;
self.filterBtn.hidden = NO;
}else{
self.refreshBtn.hidden = YES;
self.filterBtn.hidden = YES;
}
}
#pragma mark - JXPagerMainTableViewGestureDelegate
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
///1000是外部的scrollView 1001是人气主播中的collectionView 9999是 开黑畅聊的轮播图
if (otherGestureRecognizer.view.tag == 1000 || otherGestureRecognizer.view == self.headerView || otherGestureRecognizer.view.tag == 1001 || otherGestureRecognizer.view.tag == 9999) {
return NO;
}
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
#pragma mark - Getters And Setters
- (UIImageView *)topGradientImageView {
if (!_topGradientImageView) {
_topGradientImageView = [[UIImageView alloc] init];
_topGradientImageView.image = [UIImage gradientColorImageFromColors:@[[ThemeColor colorWithHexString:@"#DCF6FF"], [ThemeColor colorWithHexString:@"#F8F8FA"]] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(KScreenWidth, 125)];
_topGradientImageView.contentMode = UIViewContentModeScaleToFill;
}
return _topGradientImageView;
}
- (XPNewHomeNavView *)homeNavView {
if (!_homeNavView) {
_homeNavView = [[XPNewHomeNavView alloc] init];
_homeNavView.delegate = self;
}
return _homeNavView;
}
- (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.mainTableView.gestureDelegate = self;
_pagingView.listContainerView.listCellBackgroundColor = UIColor.clearColor;
}
return _pagingView;
}
- (NSArray<NSString *> *)titles {
if (!_titles) {
_titles = @[@"发现新朋友", @"开黑组队"];
}
return _titles;
}
- (UIView *)pageHeaderView {
if (!_pageHeaderView) {
_pageHeaderView = [[UIView alloc] init];
}
return _pageHeaderView;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentCenter;
_stackView.spacing = 6;
}
return _stackView;
}
- (XPButton *)filterBtn {
if (!_filterBtn) {
_filterBtn = [XPButton buttonWithType:UIButtonTypeCustom];
[_filterBtn setImage:[UIImage imageNamed:@"home_filter_arrow"] forState:UIControlStateNormal];
[_filterBtn setTitle:@"全部" forState:UIControlStateNormal];
[_filterBtn setTitleColor:[ThemeColor secondTextColor] forState:UIControlStateNormal];
_filterBtn.titleLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightMedium];
_filterBtn.backgroundColor = UIColor.whiteColor;
_filterBtn.layer.cornerRadius = 12;
_filterBtn.clipsToBounds = YES;
_filterBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
[_filterBtn addTarget:self action:@selector(filterBtnAction) forControlEvents:UIControlEventTouchUpInside];
_filterBtn.imagePosition = XPButtonImagePositionRight;
_filterBtn.imageTitleSpace = 4;
}
return _filterBtn;
}
- (XPButton *)refreshBtn {
if (!_refreshBtn) {
_refreshBtn = [XPButton buttonWithType:UIButtonTypeCustom];
[_refreshBtn setImage:[UIImage imageNamed:@"home_refresh"] forState:UIControlStateNormal];
[_refreshBtn setTitle:@"换一换" forState:UIControlStateNormal];
[_refreshBtn setTitleColor:[ThemeColor secondTextColor] forState:UIControlStateNormal];
_refreshBtn.titleLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightMedium];
_refreshBtn.backgroundColor = UIColor.whiteColor;
_refreshBtn.layer.cornerRadius = 12;
_refreshBtn.clipsToBounds = YES;
_refreshBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
[_refreshBtn addTarget:self action:@selector(refreshBtnAction) forControlEvents:UIControlEventTouchUpInside];
_refreshBtn.imagePosition = XPButtonImagePositionRight;
_refreshBtn.imageTitleSpace = 4;
}
return _refreshBtn;
}
- (XPNewHomeHeaderView *)headerView {
if (!_headerView) {
_headerView = [[XPNewHomeHeaderView alloc] init];
_headerView.backgroundColor = [UIColor clearColor];
_headerView.delegate = self;
}
return _headerView;
}
- (XPHomeHappyViewController *)personalRoomVC {
if (!_personalRoomVC) {
_personalRoomVC = [[XPHomeHappyViewController alloc] init];
}
return _personalRoomVC;
}
- (XPFindNewFriendViewController *)friendVC {
if (!_friendVC) {
_friendVC = [[XPFindNewFriendViewController alloc] init];
}
return _friendVC;
}
- (XPTeenagerHomeView *)teenagerView {
if (!_teenagerView) {
_teenagerView = [[XPTeenagerHomeView alloc] init];
}
return _teenagerView;
}
@end