Files
peko-ios/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m

1063 lines
38 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// XPNewHomeViewController.m
// YuMi
//
// Created by YuMi on 2023/6/18.
//
#import "XPNewHomeViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <JXPagingView/JXPagerView.h>
#import <JXPagingView/JXPagerListRefreshView.h>
#import <JXCategoryView/JXCategoryView.h>
#import <MJRefresh/MJRefresh.h>
#import "SDWebImageManager.h"
#import "FirstRechargeModel.h"
#import "FirstRechargeManager.h"
///Tool
#import "Api+Home.h"
#import "YUMIMacroUitls.h"
#import "DJDKMIMOMColor.h"
#import "YUMIHtmlUrl.h"
#import "UIImage+Utils.h"
#import "AccountInfoStorage.h"
#import "Api+Room.h"
#import "TTPopup.h"
#import "NSArray+Safe.h"
#import "XPWeakTimer.h"
///Model
#import "HomeTagModel.h"
#import "AccountModel.h"
#import "XPLittleGameRoomOpenView.h"
#import "PIHomeItemModel.h"
#import "HomeMenuSourceModel.h"
///View
#import "XPRoomSearchContainerViewController.h"
#import "XPHomePartyViewController.h"
#import "XPWebViewController.h"
#import "XPNewHomeNavView.h"
#import "XPRoomViewController.h"
#import "XPNewHomeHeadView.h"
#import "PIHoemCategoryTitleView.h"
#import "XPHomeRecommendOtherRoomView.h"
///P
#import "XPHomeContainerPresenter.h"
#import "XPHomeContainerProtocol.h"
#import "ClientConfig.h"
#import "SessionViewController.h"
#import "Api+Main.h"
#import "LoginViewController.h"
#import "BaseNavigationController.h"
#import "XPAdImageTool.h"
#import "PIHomeCategoryTitleModel.h"
#import "RegionListViewController.h"
#import "EventCenterViewController.h"
UIKIT_EXTERN NSString * kHomeMoreScrollPageKey;
UIKIT_EXTERN NSString * const kOpenRoomNotification;
@interface HomeCategoryTabListCell : UICollectionViewCell
@property(nonatomic, assign) BOOL isSelected;
@property(nonatomic, strong) UIView *selectedBackground;
@property(nonatomic, strong) NetImageView *iconImageView;
@property(nonatomic, strong) PIHomeCategoryTitleModel *cellModel;
@property(nonatomic, copy) void(^didTapCategoryModel)(PIHomeCategoryTitleModel *model);
@end
@implementation HomeCategoryTabListCell
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor clearColor];
[self.contentView setCornerRadius:15];
self.contentView.backgroundColor = [UIColor whiteColor];
[self.contentView addSubview:self.selectedBackground];
[self.selectedBackground mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.contentView);
}];
[self.contentView addSubview:self.iconImageView];
[self.iconImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.contentView);
make.size.mas_equalTo(CGSizeMake(36, 23));
}];
}
return self;
}
- (void)setCellModel:(PIHomeCategoryTitleModel *)cellModel {
_cellModel = cellModel;
self.iconImageView.imageUrl = cellModel.icon;
}
- (void)setSelected:(BOOL)selected {
[super setSelected:selected];
self.selectedBackground.hidden = !selected;
if (selected && self.didTapCategoryModel) {
self.didTapCategoryModel(self.cellModel);
}
}
#pragma mark -
- (UIView *)selectedBackground {
if (!_selectedBackground) {
_selectedBackground = [[UIView alloc] init];
_selectedBackground.backgroundColor = [UIColor whiteColor];
[_selectedBackground setCornerRadius:15
corners:kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner | kCALayerMinXMaxYCorner | kCALayerMinXMinYCorner
borderWidth:1
borderColor:UIColorFromRGB(0xFF8C03)];
_selectedBackground.hidden = YES;
}
return _selectedBackground;
}
- (NetImageView *)iconImageView {
if (!_iconImageView) {
_iconImageView = [[NetImageView alloc] init];
}
return _iconImageView;
}
@end
@interface HomeCategoryTabList : UIView <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property(nonatomic, assign) NSInteger lastSelectedIndex;
@property(nonatomic, strong) UIButton *arrowButton;
@property(nonatomic, strong) UIView *gradientMask;
@property(nonatomic, strong) UICollectionView *tabCollectionView;
@property(nonatomic, copy) NSArray <PIHomeCategoryTitleModel*> *tabArray;
@property(nonatomic, copy) void(^didTapCategoryModel)(PIHomeCategoryTitleModel *model);
@property(nonatomic, copy) void(^didTapArrow)(void);
@property(nonatomic, assign) BOOL firstLoad;
- (void)closeArrow;
- (void)updateIndex:(NSInteger)index;
@end
@implementation HomeCategoryTabList
- (instancetype)init {
if (self = [super init]) {
self.backgroundColor = [[ClientConfig shareConfig] bgColor];
self.lastSelectedIndex = -1;
self.firstLoad = YES;
[self addSubview:self.tabCollectionView];
[self addSubview:self.arrowButton];
[self.tabCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.mas_equalTo(self);
make.leading.mas_equalTo(0);
make.trailing.mas_equalTo(self).offset(-15);
}];
[self.arrowButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self);
make.size.mas_equalTo(CGSizeMake(24, 24));
make.trailing.mas_equalTo(-15);
}];
_gradientMask = [[UIView alloc] init];
NSArray *colorArr = @[[UIColor colorWithWhite:1 alpha:0.0],
[[ClientConfig shareConfig] bgColor]];
if (isMSRTL()) {
colorArr = @[[[ClientConfig shareConfig] bgColor],
[UIColor colorWithWhite:1 alpha:0.0]];
[_gradientMask addGradientBackgroundWithColors:colorArr
startPoint:CGPointMake(0.7, 0.5)
endPoint:CGPointMake(1.0, 0.5)
cornerRadius:0];
} else {
[_gradientMask addGradientBackgroundWithColors:colorArr
startPoint:CGPointMake(0.2, 0.5)
endPoint:CGPointMake(0.4, 0.5)
cornerRadius:0];
}
[self insertSubview:self.gradientMask belowSubview:self.arrowButton];
[self.gradientMask mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.arrowButton).offset(-20);
make.trailing.mas_equalTo(self);
make.top.bottom.mas_equalTo(self);
}];
}
return self;
}
- (void)handleTapArrow {
if (_didTapArrow) {
self.didTapArrow();
}
}
- (void)setTabArray:(NSArray<PIHomeCategoryTitleModel *> *)tabArray {
if (tabArray == nil) {
tabArray = @[];
}
_tabArray = tabArray;
// 如果 tab items 总长度到达或超过边缘,要显示箭头按钮
if (46 * self.tabArray.count + 12 * (self.tabArray.count-1) > KScreenWidth-30) {
self.gradientMask.hidden = NO;
self.arrowButton.hidden = NO;
} else {
self.gradientMask.hidden = YES;
self.arrowButton.hidden = YES;
}
[self.tabCollectionView reloadData];
if (tabArray.count > 0 && self.firstLoad == YES) {
self.firstLoad = NO;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.tabCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO
scrollPosition:UICollectionViewScrollPositionNone];
});
}
@kWeakify(self);
dispatch_async(dispatch_get_main_queue(), ^{
@kStrongify(self);
if (!self) {
return;
}
if (tabArray.count > 0) {
if (self.lastSelectedIndex > -1 && self.lastSelectedIndex < tabArray.count - 1) {
[self.tabCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForRow:self.lastSelectedIndex inSection:0]
animated:NO
scrollPosition:UICollectionViewScrollPositionNone];
} else {
// 阿语环境可能会出现选中错误的 index
if (isMSRTL()) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.tabCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
animated:YES];
});
}
}
}
});
}
- (void)closeArrow {
}
- (void)updateIndex:(NSInteger)index {
if (index == self.lastSelectedIndex) {
return;
}
if (index < self.tabArray.count) {
self.lastSelectedIndex = index;
[self.tabCollectionView selectItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]
animated:YES
scrollPosition:UICollectionViewScrollPositionNone];
}
}
#pragma mark -
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.tabArray.count;
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
HomeCategoryTabListCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeCategoryTabListCell" forIndexPath:indexPath];
cell.cellModel = [self.tabArray xpSafeObjectAtIndex:indexPath.row];
@kWeakify(self);
[cell setDidTapCategoryModel:^(PIHomeCategoryTitleModel *model) {
@kStrongify(self);
if (self.didTapCategoryModel) {
self.didTapCategoryModel(model);
}
}];
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
self.lastSelectedIndex = indexPath.row;
}
#pragma mark -
- (UIButton *)arrowButton {
if (!_arrowButton) {
_arrowButton = [UIButton buttonWithType:UIButtonTypeCustom];
_arrowButton.backgroundColor = [UIColor clearColor];
[_arrowButton setImage:kImage(@"common_down_arrow")
forState:UIControlStateNormal];
[_arrowButton addTarget:self
action:@selector(handleTapArrow)
forControlEvents:UIControlEventTouchUpInside];
}
return _arrowButton;
}
- (UIScrollView *)tabCollectionView {
if (!_tabCollectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(46, 30);
layout.minimumLineSpacing = 12;
layout.minimumInteritemSpacing = 12;
layout.sectionInset = UIEdgeInsetsMake(0, 14, 0, 30);
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
_tabCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero
collectionViewLayout:layout];
_tabCollectionView.backgroundColor = [UIColor clearColor];
_tabCollectionView.showsHorizontalScrollIndicator = NO;
_tabCollectionView.delegate = self;
_tabCollectionView.dataSource = self;
[_tabCollectionView registerClass:[HomeCategoryTabListCell class]
forCellWithReuseIdentifier:@"HomeCategoryTabListCell"];
}
return _tabCollectionView;
}
@end
@interface XPNewHomeViewController ()<
JXPagerViewDelegate,
JXPagerMainTableViewGestureDelegate,
JXCategoryViewDelegate,
XPHomeContainerProtocol,
XPNewHomeNavViewDelegate,
XPNewHomeHeadViewDelegate,
XPHomeRecommendOtherRoomViewDelegate,
FirstRechargeManagerDelegate>
///头视图
@property(nonatomic,strong) XPNewHomeHeadView *headView;
///分页标题
@property (nonatomic, strong) NSMutableArray<PIHomeCategoryTitleModel *> *tagModelList;
///分页控件
@property (nonatomic, strong) JXCategoryTitleView *titleView;
@property(nonatomic, strong) HomeCategoryTabList *categoryTagList;
///分页lineView
@property (nonatomic, strong) JXPagerView *pagingView;
@property (nonatomic,strong) HomeTagModel *recommendItem;
///解决弱网时首页底部出现一片空白bug
@property (nonatomic,assign) BOOL isEmpty;
@property(nonatomic,assign) BOOL isCheckIp;
@property(nonatomic,assign) NSInteger type;
@property(nonatomic,strong) NSMutableDictionary *validListDict;
@property (nonatomic, copy) NSArray<HomeBannerInfoModel *> *bannerInfoList;
@property (nonatomic, copy) NSArray<HomeBannerInfoModel *> *secondBannerInfoList;
@property(nonatomic, assign) NSInteger maxReloadTagsLimitCount;
@property(nonatomic, assign) NSInteger reloadTagsLimitCount;
@property (nonatomic, assign) bool hasLoadAPIs;
// 首充弹窗引用
@property (nonatomic, strong) XPWebViewController *firstChargeWebVC;
// 首充弹窗背景视图
@property (nonatomic, strong) UIView *firstChargeBackgroundView;
@end
@implementation XPNewHomeViewController
-(instancetype)initWithIsEmpty:(BOOL)isEmpty{
self = [super init];
if(self){
self.isEmpty = isEmpty;
}
return self;
}
-(void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self];
[FirstRechargeManager sharedManager].delegate = nil;
}
- (BOOL)isHiddenNavBar {
return YES;
}
- (XPHomeContainerPresenter *)createPresenter {
return [[XPHomeContainerPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
if(self.isEmpty == NO){
self.maxReloadTagsLimitCount = 5;
self.reloadTagsLimitCount = 0;
[self initSubViews];
[self initSubViewConstraints];
[self requestCheckIp];
// 注册首充管理器监听
[FirstRechargeManager sharedManager].delegate = self;
[[FirstRechargeManager sharedManager] startMonitoring];
// [self.presenter getUserFirstChargeStatus];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (!self.hasLoadAPIs) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.pagingView.mainTableView.mj_header beginRefreshing];
});
self.hasLoadAPIs = YES;
}
}
- (void)tokenInvalid {
// 停止首充监控
[[FirstRechargeManager sharedManager] stopMonitoring];
[[AccountInfoStorage instance] saveAccountInfo:nil];
[[AccountInfoStorage instance] saveTicket:nil];
if ([NIMSDK sharedSDK].loginManager.isLogined) {
[[NIMSDK sharedSDK].loginManager logout:nil];
}
LoginViewController *lvc = [[LoginViewController alloc] init];
BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:lvc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
kWindow.rootViewController = nav;
XPAdImageTool.shareImageTool.isImLogin = NO;
}
- (void)createTagScrollView {
if (_categoryTagList) {
return;
}
[self.titleView addSubview:self.categoryTagList];
[self.categoryTagList mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.titleView);
}];
}
#pragma mark - Private Method
- (void)initSubViews {
self.type = 0;
self.view.backgroundColor = [UIColor clearColor];
[self.view addSubview:self.pagingView];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(openRoomNotification:)
name:kOpenRoomNotification
object:nil];
if([[AccountInfoStorage instance] getUid].length == 0){
return;
}
if([ClientConfig shareConfig].roomId != nil){
[self opRoom:[ClientConfig shareConfig].roomId];
[ClientConfig shareConfig].roomId = nil;
}
if([ClientConfig shareConfig].chatId != nil){
NIMSession * session = [NIMSession session:[ClientConfig shareConfig].chatId type:NIMSessionTypeP2P];
SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session];
sessionVC.isAttention = YES;
[self.navigationController pushViewController:sessionVC animated:YES];
[ClientConfig shareConfig].chatId = nil;
}
if([ClientConfig shareConfig].pushChatId != nil){
NIMSession * session = [NIMSession session:[ClientConfig shareConfig].pushChatId type:NIMSessionTypeP2P];
SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session];
[self.navigationController pushViewController:sessionVC animated:YES];
[ClientConfig shareConfig].pushChatId = nil;
}
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 = [DJDKMIMOMColor secondTextColor];
header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor];
self.pagingView.mainTableView.mj_header = header;
[ClientConfig shareConfig].inviteCode = @"";
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(homeVCRefreshComplete) name:@"khomeVCRefreshComplete" object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(logOut) name:@"kInLoginVC" object:nil];
// [header beginRefreshing];
}
-(void)homeVCRefreshComplete{
[self.pagingView.mainTableView.mj_header endRefreshing];
[self.pagingView.mainTableView.mj_footer endRefreshing];
}
-(void)logOut{
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(requestCheckIp)
object:nil];
}
-(void)headerRefresh{
[self.presenter getHomeTopData];
[self.presenter getHomeTagList];
[self.presenter getHomeRanks];
PIHomeCategoryTitleModel *tagModel = [self.tagModelList xpSafeObjectAtIndex:self.type];
XPHomePartyViewController *homeVC = [self.validListDict objectForKey:[NSNumber numberWithInteger:self.type]];
homeVC.tagModel = tagModel;
homeVC.bannerInfoList = self.bannerInfoList;
@kWeakify(self);
[homeVC setDidTapBannerItem:^(HomeBannerInfoModel * _Nonnull itemModel) {
@kStrongify(self);
[self handleTapBannerItem:itemModel];
}];
}
-(void)openRoomNotification:(NSNotification *)notification{
if([[AccountInfoStorage instance] getUid].length == 0){
return;
}
NSString *uid = notification.userInfo[@"uid"];
NSString *type = notification.userInfo[@"type"];
BOOL isNoAttention = [notification.userInfo[@"isNoAttention"] boolValue];
if([type isEqualToString:@"kOpenChat"]){
if (uid.length > 0) {
NIMSession * session = [NIMSession session:uid type:NIMSessionTypeP2P];
SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session];
sessionVC.isAttention = !isNoAttention;
[self.navigationController pushViewController:sessionVC animated:YES];
if(isNoAttention == YES){
[ClientConfig shareConfig].pushChatId = nil;
}else{
[ClientConfig shareConfig].chatId = nil;
}
}
return;
}
ClientConfig *config = [ClientConfig shareConfig];
config.chatId = uid;
if(uid != nil){
[self opRoom:uid];
[ClientConfig shareConfig].roomId = nil;
}
}
- (void)initSubViewConstraints {
[self.pagingView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).mas_offset(10);
make.leading.bottom.trailing.mas_equalTo(0);
}];
}
- (void)showAllTags {
RegionListViewController *vc = [[RegionListViewController alloc] initForHomeTags:self.tagModelList
currentItem:self.tagModelList[self.titleView.selectedIndex]];
@kWeakify(self);
vc.handleDismiss = ^{
@kStrongify(self);
[self.categoryTagList closeArrow];
};
vc.handleTapCategiryComfirm = ^(PIHomeCategoryTitleModel *tagModel) {
@kStrongify(self);
NSInteger index = [self.tagModelList indexOfObject:tagModel];
[self.titleView selectItemAtIndex:index];
[self.categoryTagList updateIndex:index];
};
[self presentViewController:vc animated:YES completion:^{ }];
}
#pragma mark - XPNewHomeNavViewDelegate
- (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickRank:(UIButton *)sender {
XPWebViewController * webVC =[[XPWebViewController alloc] initWithRoomUID:nil];
webVC.url = URLWithType(kRankV2);
[self.navigationController pushViewController:webVC animated:YES];
}
- (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickOpenRoom:(UIButton *)sender {
NSString* roomUid = [AccountInfoStorage instance].getUid;
[self opRoom:roomUid];
}
-(void)opRoom:(NSString *)roomUid{
@kWeakify(self);
[Api getRoomInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
@kStrongify(self);
if(code == 401){
[self tokenInvalid];
[self showErrorToast:msg];
return;
}
if (code == 200) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithJSON:data.data];
if (roomInfo.isReselect) {
XPLittleGameRoomOpenView * roomOpenView = [[XPLittleGameRoomOpenView alloc] init];
roomOpenView.roomInfo = roomInfo;
roomOpenView.currentVC = self;
[TTPopup popupView:roomOpenView style:TTPopupStyleActionSheet];
} else {
[XPRoomViewController openRoom:roomUid viewController:self];
}
} else {
[self showErrorToast:msg];
}
} uid:roomUid intoUid:roomUid];
}
- (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickSearch:(UIView *)sender {
XPRoomSearchContainerViewController * searchVC = [[XPRoomSearchContainerViewController alloc] init];
searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self.navigationController presentViewController:searchVC animated:YES completion:nil];
}
#pragma mark - JXCategoryViewDelegate
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
if (self.headView.bannerList.count == 0){
return kGetScaleWidth(80);
}
return kGetScaleWidth(170);
}
- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
return self.headView;
}
- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return kGetScaleWidth(40);
}
- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
return self.titleView;
}
- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
return self.tagModelList.count;
}
- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
id homeV = [self.validListDict objectForKey:@(index)];
if (homeV) {
return homeV;
}
XPHomePartyViewController *homeVC = [[XPHomePartyViewController alloc] init];
homeVC.bannerInfoList = self.bannerInfoList;
homeVC.tagModel = [self.tagModelList xpSafeObjectAtIndex:index];
@kWeakify(self);
[homeVC setDidTapBannerItem:^(HomeBannerInfoModel * _Nonnull itemModel) {
@kStrongify(self);
[self handleTapBannerItem:itemModel];
}];
[homeVC setDidAppear:^(PIHomeCategoryTitleModel * _Nonnull displayModel) {
@kStrongify(self);
if (self.validListDict.count > 1) {
NSInteger currentIndex = [self.tagModelList indexOfObject:displayModel];
[self.titleView selectItemAtIndex:index];
[self.categoryTagList updateIndex:currentIndex];
}
}];
[self.validListDict setObject:homeVC forKey:@(index)];
return homeVC;
}
- (NSString *)pagerView:(JXPagerView *)pagerView listIdentifierAtIndex:(NSInteger)index {
return @(index).stringValue;
}
#pragma mark - JXCategoryListContentViewDelegate
- (UIView *)listView {
return self.view;
}
#pragma mark - JXPagerMainTableViewGestureDelegate
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
//禁止categoryView左右滑动的时候上下和左右都可以滚动
if (otherGestureRecognizer.view == self.pagingView.listContainerView) {
return NO;
}
if(otherGestureRecognizer.view.tag == 9000001){
return NO;
}
if(otherGestureRecognizer.view.tag == 9000002){
return NO;
}
if(otherGestureRecognizer.view.tag == 98777){
return NO;
}
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
#pragma mark - XPHomeContainerProtocol
- (void)getHomeTopDataSuccess:(NSArray*)list menuList:(NSArray *)memuList{
self.headView.bannerList = list;
self.bannerInfoList = list;
[self.pagingView reloadData];
[self.pagingView resizeTableHeaderViewHeightWithAnimatable:NO duration:0 curve:0];
}
- (void)getHomeTopDataSuccess:(NSArray *)resourceList
banners:(NSArray *)banners
rankAvatars:(NSArray *)rankAvatars {
self.headView.bannerList = banners;
self.headView.rankAvatars = rankAvatars;
[self.pagingView reloadData];
[self.pagingView resizeTableHeaderViewHeightWithAnimatable:NO duration:0 curve:0];
}
- (void)getHomeRanksSuccess:(NSArray *)resourceList
{
self.headView.rankAvatars = resourceList;
}
///获取所有的tag成功
- (void)getHomeTagListSuccess:(NSArray<PIHomeCategoryTitleModel *> *)array{
if(array.count == 0) {
[self getHomeTagListFailure];
return;
}
self.reloadTagsLimitCount = 0;
NSMutableArray *list = [NSMutableArray new];
NSMutableArray *titleArray = [NSMutableArray array];
for (PIHomeCategoryTitleModel *model in array) {
if (model.isHomeRecommend == YES){
[list insertObject:model atIndex:0];
[titleArray insertObject:model.name atIndex:0];
}else{
[list addObject:model];
[titleArray addObject:model.name];
}
}
self.tagModelList = list;
self.titleView.titles = titleArray;
[self.titleView reloadData];
[self createTagScrollView];
[self.categoryTagList setTabArray:list];
}
- (void)getHomeTagListFailure {
[self.pagingView.mainTableView.mj_header endRefreshing];
[self tryReloadTags];
}
- (void)tryReloadTags {
if (self.reloadTagsLimitCount >= self.maxReloadTagsLimitCount) {
return;
}
self.reloadTagsLimitCount += 1;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.pagingView.mainTableView.mj_header beginRefreshing];
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.presenter getHomeTagList];
});
}
- (void)displayEmpatyDataView {
}
- (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)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index{
self.type = index;
}
- (void)getFirstChargeSuccess:(FirstRechargeModel *)model {
if (model.chargeStatus == NO) {
// TODO: 弹出窗口 web view
XPWebViewController *web = [[XPWebViewController alloc] initWithRoomUID:@""];
[self addChildViewController:web];
[self.view addSubview:web.view];
web.view.frame = CGRectMake(0, 0, KScreenWidth/2, KScreenHeight/2);
web.view.center = self.view.center;
}
}
#pragma mark - FirstRechargeManagerDelegate
- (void)firstRechargeManager:(FirstRechargeManager *)manager didCheckFirstRecharge:(FirstRechargeModel *)model shouldShow:(BOOL)shouldShow {
if (shouldShow && model.chargeStatus == NO) {
// 展示首充弹窗
[self showFirstRechargePopup:model];
// 标记今天已展示过(在展示后标记)
[[FirstRechargeManager sharedManager] markTodayShown];
}
}
- (void)showFirstRechargePopup:(FirstRechargeModel *)model {
if (model.chargeStatus) {
return;
}
// 如果已经有弹窗在显示,先移除它
[self removeFirstChargePopup];
// 创建背景视图
self.firstChargeBackgroundView = [[UIView alloc] initWithFrame:self.view.bounds];
self.firstChargeBackgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
// 添加点击手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBackgroundTap:)];
[self.firstChargeBackgroundView addGestureRecognizer:tapGesture];
// 添加背景视图
[self.view addSubview:self.firstChargeBackgroundView];
// 创建并配置 web 视图
self.firstChargeWebVC = [[XPWebViewController alloc] initWithRoomUID:@""];
self.firstChargeWebVC.isPush = NO;
self.firstChargeWebVC.url = @"https://jandan.net/pic";
[self addChildViewController:self.firstChargeWebVC];
[self.firstChargeBackgroundView addSubview:self.firstChargeWebVC.view];
self.firstChargeWebVC.view.frame = CGRectMake(0, 0, KScreenWidth/2, KScreenHeight/2);
self.firstChargeWebVC.view.center = self.firstChargeBackgroundView.center;
// 3秒后自动移除
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self removeFirstChargePopup];
});
}
// 处理背景点击事件
- (void)handleBackgroundTap:(UITapGestureRecognizer *)gesture {
CGPoint location = [gesture locationInView:self.firstChargeBackgroundView];
if (!CGRectContainsPoint(self.firstChargeWebVC.view.frame, location)) {
[self removeFirstChargePopup];
}
}
// 修改移除弹窗的方法
- (void)removeFirstChargePopup {
if (self.firstChargeWebVC) {
[self.firstChargeWebVC.view removeFromSuperview];
[self.firstChargeWebVC removeFromParentViewController];
self.firstChargeWebVC = nil;
}
if (self.firstChargeBackgroundView) {
[self.firstChargeBackgroundView removeFromSuperview];
self.firstChargeBackgroundView = nil;
}
}
#pragma mark - XPNewHomeHeadViewDelegate
///
-(void)checkIpRegionSuccess:(NSInteger)seconds{
if(seconds <= 0)return;
[self performSelector:@selector(requestCheckIp) withObject:nil afterDelay:seconds];
}
- (void)checkIpRegionFailWithMsg:(NSString *)msg{
[self tokenInvalid];
[self showErrorToast:msg];
}
-(void)requestCheckIp{
if([AccountInfoStorage instance].getTicket.length > 0 &&
[AccountInfoStorage instance].name.length > 0){
[self.presenter checkIpRegionAction];
}
}
///选择
- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0: {
// TODO: 通过 API 来获取最新的 排行榜 link
XPWebViewController * webVC =[[XPWebViewController alloc] initWithRoomUID:nil];
webVC.url = URLWithType(kRankV2);
[self.navigationController pushViewController:webVC animated:YES];
}
break;
case 1: {
EventCenterViewController *vc = [[EventCenterViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}
break;
default:
break;
}
}
//-(void)selectItemWithModel:(PIHomeItemModel *)model{
// switch (model.resourceType) {
// case HomeMenuResourceType_H5: {
// XPWebViewController * webVC = [[ XPWebViewController alloc] initWithRoomUID:nil];
// webVC.url = model.resourceContent;
// [self.navigationController pushViewController:webVC animated:YES];
// }
// break;
// case HomeMenuResourceType_Match:
// [self.presenter homeChatPick];
// break;
// case HomeMenuResourceType_Room_Game: {
// @kWeakify(self);
// [Api homePickResource:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
// @kStrongify(self);
// 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 {
// [XNDJTDDLoadingTool showErrorWithMessage:msg];
// }
// } uid:uid rid:model.ID];
// }
// default:
// {
// EventCenterViewController *vc = [[EventCenterViewController alloc] init];
// [self.navigationController pushViewController:vc animated:YES];
// vc.officialEventModels = self.headView.bannerList;
// }
// break;
// }
//}
-(void)selectBannerListWithModel:(HomeBannerInfoModel *)model{
[self handleTapBannerItem:model];
}
///点击了进入房间
- (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 -
- (void)handleTapBannerItem:(HomeBannerInfoModel *)model {
switch (model.skipType) {
case HomeBannerInfoSkipType_Room:{
if (model.skipUri.length > 0) {
[XPRoomViewController openRoom:model.skipUri viewController:self];
}
}
break;
case HomeBannerInfoSkipType_Web:
case HomeBannerInfoSkipType_Web_CP:
case HomeBannerInfoSkipType_Web_Custom:
case HomeBannerInfoSkipType_Web_WeekStar:
{
XPWebViewController *vc = [[XPWebViewController alloc] initWithRoomUID:nil];
vc.url = model.skipUri;
[self.navigationController pushViewController:vc animated:YES];
}
break;
case HomeBannerInfoSkipType_APP:
case HomeBannerInfoSkipType_None:
default:
break;
}
}
#pragma mark - Getters And Setters
- (JXCategoryTitleView *)titleView {
if (!_titleView) {
_titleView = [[JXCategoryTitleView alloc] initWithFrame:CGRectZero];
_titleView.delegate = self;
_titleView.titles = @[];
_titleView.backgroundColor = [UIColor clearColor];
_titleView.titleColor = UIColorFromRGB(0x767585);
_titleView.titleSelectedColor = UIColorFromRGB(0x1E1E1E);
_titleView.titleFont = kFontBold(14);
_titleView.titleSelectedFont = kFontBold(14);
_titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter;
_titleView.contentScrollViewClickTransitionAnimationEnabled = NO;
_titleView.defaultSelectedIndex = 0;
_titleView.cellSpacing = kGetScaleWidth(20);
_titleView.listContainer = (id<JXCategoryViewListContainer>)self.pagingView.listContainerView;
}
return _titleView;
}
- (NSMutableArray<PIHomeCategoryTitleModel *> *)tagModelList{
if(!_tagModelList){
_tagModelList = [NSMutableArray array];
}
return _tagModelList;
}
- (JXPagerView *)pagingView {
if (!_pagingView) {
_pagingView = [[JXPagerView alloc] initWithDelegate:self listContainerType:0];
_pagingView.mainTableView.gestureDelegate = self;
_pagingView.backgroundColor = [UIColor clearColor];
_pagingView.listContainerView.backgroundColor = [UIColor clearColor];
_pagingView.listContainerView.listCellBackgroundColor = [UIColor clearColor];
_pagingView.mainTableView.backgroundColor = [UIColor clearColor];
}
return _pagingView;
}
- (HomeTagModel *)recommendItem {
if (!_recommendItem) {
_recommendItem = [[HomeTagModel alloc] init];
_recommendItem.name = YMLocalizedString(@"XPNewHomeViewController3");
}
return _recommendItem;
}
- (XPNewHomeHeadView *)headView{
if(!_headView){
_headView = [[XPNewHomeHeadView alloc]initWithFrame:CGRectZero];
_headView.delegate = self;
}
return _headView;
}
- (NSMutableDictionary *)validListDict{
if(!_validListDict){
_validListDict = [NSMutableDictionary dictionary];
}
return _validListDict;
}
- (HomeCategoryTabList *)categoryTagList {
if (!_categoryTagList) {
_categoryTagList = [[HomeCategoryTabList alloc] init];
@kWeakify(self);
[_categoryTagList setDidTapArrow:^{
@kStrongify(self);
[self showAllTags];
}];
[_categoryTagList setDidTapCategoryModel:^(PIHomeCategoryTitleModel *model) {
@kStrongify(self);
NSInteger index = [self.tagModelList indexOfObject:model];
[self.titleView selectItemAtIndex:index];
}];
}
return _categoryTagList;
}
@end