// // XPNewHomeViewController.m // YuMi // // Created by YuMi on 2023/6/18. // #import "XPNewHomeViewController.h" ///Third #import #import #import #import ///Tool #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" ///Model #import "HomeTagModel.h" ///View #import "XPRoomSearchContainerViewController.h" #import "XPHomePartyViewController.h" #import "XPWebViewController.h" #import "XPHomeRecommendViewController.h" #import "XPNewHomeNavView.h" #import "XPRoomViewController.h" ///P #import "XPHomeContainerPresenter.h" #import "XPHomeContainerProtocol.h" UIKIT_EXTERN NSString * kHomeMoreScrollPageKey; UIKIT_EXTERN NSString * const kOpenRoomNotification; @interface XPNewHomeViewController () @property (nonatomic,strong) UIImageView *backImageView; @property (nonatomic,strong) XPNewHomeNavView *navView; ///分页标题 @property (nonatomic, strong) NSArray *titles; ///分页控件 @property (nonatomic, strong) JXCategoryTitleView *titleView; ///分页lineView @property (nonatomic, strong) JXCategoryListContainerView *contentView; ///tag的列表 @property (nonatomic,copy) NSMutableArray *tagList; @property (nonatomic,strong) HomeTagModel *recommendItem; ///解决弱网时首页底部出现一片空白bug @property (nonatomic,assign) BOOL isEmpty; @end @implementation XPNewHomeViewController -(instancetype)initWithIsEmpty:(BOOL)isEmpty{ self = [super init]; if(self){ self.isEmpty = isEmpty; } return self; } -(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self]; } - (BOOL)isHiddenNavBar { return YES; } - (XPHomeContainerPresenter *)createPresenter { return [[XPHomeContainerPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; if(self.isEmpty == NO){ [self initHttp]; [self initSubViews]; [self initSubViewConstraints]; } } #pragma mark - Private Method - (void)initSubViews { self.view.backgroundColor = [DJDKMIMOMColor colorWithHexString:@"#F3F5FA"]; [self.view addSubview:self.backImageView]; [self.view addSubview:self.navView]; [self.view addSubview:self.titleView]; [self.view addSubview:self.contentView]; } - (void)initSubViewConstraints { [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_equalTo(self.view); make.height.mas_equalTo(170 + kSafeAreaTopHeight); }]; [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_equalTo(self.view); make.height.mas_equalTo(kNavigationHeight); }]; [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.navView.mas_bottom).offset(10); make.left.right.mas_equalTo(self.view); make.height.mas_equalTo(30); }]; [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.titleView.mas_bottom); make.left.right.bottom.mas_equalTo(self.view); }]; } - (void)initHttp { [self.presenter getHomeTagList]; } #pragma mark - XPNewHomeNavViewDelegate - (void)xPNewHomeNavView:(XPNewHomeNavView *)view didClickRank:(UIButton *)sender { XPWebViewController * webVC =[[XPWebViewController alloc] init]; webVC.url = URLWithType(kHomeRankURL); [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{ [XPRoomViewController openRoom:roomUid viewController:self]; } - (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 - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { return self.titles.count; } - (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { HomeTagModel * hometag = [self.tagList safeObjectAtIndex1:index]; UIViewController * list = (UIViewController *)[self.contentView.validListDict objectForKey:[NSNumber numberWithInteger:index]]; if (list) { return list; } else { if ([hometag.name isEqualToString:YMLocalizedString(@"XPNewHomeViewController0")]) { XPHomeRecommendViewController * recommendVC = [[XPHomeRecommendViewController alloc] init]; return recommendVC; } else { XPHomePartyViewController * homeVC = [[XPHomePartyViewController alloc] init]; homeVC.tabId = hometag.tid; return homeVC; } } } - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index { HomeTagModel * hometag = [self.tagList safeObjectAtIndex1:index]; if (![hometag.name isEqualToString:YMLocalizedString(@"XPNewHomeViewController1")]) { XPHomePartyViewController * list = (XPHomePartyViewController *)[self.contentView.validListDict objectForKey:[NSNumber numberWithInteger:index]];; list.tabId = hometag.tid; } } #pragma mark - JXCategoryListContentViewDelegate - (UIView *)listView { return self.view; } #pragma mark - XPHomeContainerProtocol - (void)getHomeTagListSuccess:(NSArray *)array { [self.tagList addObject:self.recommendItem]; [self.tagList addObjectsFromArray:array]; NSMutableArray * titles = [NSMutableArray array]; [titles addObject:YMLocalizedString(@"XPNewHomeViewController2")]; [array 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 - Getters And Setters - (JXCategoryTitleView *)titleView { if (!_titleView) { _titleView = [[JXCategoryTitleView alloc] init]; _titleView.delegate = self; _titleView.titles = self.titles; _titleView.backgroundColor = [UIColor clearColor]; _titleView.titleColor = [DJDKMIMOMColor secondTextColor]; _titleView.titleSelectedColor = [UIColor whiteColor]; _titleView.titleFont = [UIFont systemFontOfSize:14]; _titleView.titleSelectedFont = [UIFont systemFontOfSize:14]; _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; _titleView.defaultSelectedIndex = 0; _titleView.cellSpacing = 20; _titleView.cellWidthIncrement = 5; _titleView.listContainer = self.contentView; JXCategoryIndicatorImageView * indocator = [[JXCategoryIndicatorImageView alloc] init]; indocator.indicatorImageView.image = [UIImage imageNamed:@"home_slider_bg"]; indocator.indicatorImageViewSize = CGSizeMake(50, 24); indocator.verticalMargin = 4; indocator.contentMode = UIViewContentModeScaleAspectFit; _titleView.indicators = @[indocator]; } return _titleView; } - (JXCategoryListContainerView *)contentView { if (!_contentView) { _contentView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; _contentView.defaultSelectedIndex = 0; } return _contentView; } - (HomeTagModel *)recommendItem { if (!_recommendItem) { _recommendItem = [[HomeTagModel alloc] init]; _recommendItem.name = YMLocalizedString(@"XPNewHomeViewController3"); } return _recommendItem; } - (NSMutableArray *)tagList { if (!_tagList) { _tagList = [NSMutableArray array]; } return _tagList; } - (XPNewHomeNavView *)navView { if (!_navView) { _navView = [[XPNewHomeNavView alloc] init]; _navView.delegate = self; } return _navView; } - (UIImageView *)backImageView { if (!_backImageView) { _backImageView = [[UIImageView alloc] init]; _backImageView.image = [UIImage imageNamed:@"home_top_bg"]; _backImageView.layer.masksToBounds = YES; _backImageView.contentMode = UIViewContentModeScaleAspectFill; } return _backImageView; } @end