// // YMHomeController.m // MSYOUPAI // // Created by You on 2024/4/18. // Copyright © 2024 MS. All rights reserved. // #import "YMHomeController.h" #import "YMHomePageViewModel.h" #import "YMHomePageBannerView.h" #import "YMHomeChildController.h" #define LZCategoryViewHeight 54.0f @interface YMHomeController () { dispatch_source_t _timer; } /// 首页VM @property (nonatomic, strong) YMHomePageViewModel *viewModel; /// 首页Banner视图 @property (nonatomic, strong) YMHomePageBannerView *bannerView; @property (nonatomic, strong) JXCategoryTitleView *categoryView; /// 搜索按钮 @property (nonatomic, strong) UILabel *searchLabel; /// 搜索按钮 @property (nonatomic, strong) UIButton *searchBtn; @property (nonatomic, strong) UIButton *zhidingBtn; /// banner视图高度 @property (nonatomic, assign) CGFloat bannerViewHeight; @property (nonatomic, assign) NSInteger selectIndex; @end @implementation YMHomeController @dynamic viewModel; - (void)viewDidLoad { [super viewDidLoad]; [self setNavHidden:YES]; self.selectIndex = 0; [OCNotificationCenter addObserver:self selector:@selector(updateOnline) name:@"youpaifuserOnlineUpdate" object:nil]; UIView *categoryBgV = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, KScreenWidth,[self preferredCategoryViewHeight])]; [self.view addSubview:categoryBgV]; // UIImageView *homeImgV = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, KScreenWidth,adapt(170))]; // homeImgV.userInteractionEnabled = true; // homeImgV.image = [UIImage imageNamed:@"home_top_bg"]; // [categoryBgV addSubview:homeImgV]; JXCategoryTitleView *categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0.0f, StatusBarHeight, KScreenWidth - 16 * 2.0f - 24, LZCategoryViewHeight)]; categoryView.backgroundColor = [UIColor clearColor]; categoryView.titles = self.titles; categoryView.delegate = self; categoryView.titleSelectedColor = DecColorFromRGBA(0, 0, 0, 1); categoryView.titleColor = DecColorFromRGBA(0, 0, 0, 0.5); categoryView.titleColorGradientEnabled = YES; categoryView.titleFont = LCFont(18.0f); categoryView.titleSelectedFont = LCBoldFont(18.0f); categoryView.cellWidth = adapt(53); categoryView.cellSpacing = 0; categoryView.contentEdgeInsetLeft = 15; categoryView.averageCellSpacingEnabled = NO; [categoryBgV addSubview:categoryView]; self.categoryView = categoryView; JXCategoryIndicatorImageView *indicatorImageView = [[JXCategoryIndicatorImageView alloc] init]; indicatorImageView.indicatorImageViewSize = CGSizeMake(adapt(68), 44); UIImageView *indicatorImgv = [[UIImageView alloc] init]; indicatorImgv.image = [UIImage imageNamed:@"home_indicator_img"]; indicatorImgv.contentMode = UIViewContentModeScaleAspectFit; [indicatorImageView addSubview:indicatorImgv]; [indicatorImgv mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(indicatorImageView); make.width.mas_equalTo(46); make.height.mas_equalTo(32); }]; categoryView.indicators = @[indicatorImageView]; // UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, StatusBarHeight + LZCategoryViewHeight, KScreenWidth, (adapt(90) + adapt(56) + 30))]; // [categoryBgV addSubview:topView]; // self.bannerView.frame = topView.bounds; // [topView addSubview: self.bannerView]; // self.bannerView.frame = CGRectZero; // self.bannerView.hidden = YES; JXCategoryListContainerView *listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_CollectionView delegate:self]; // listContainerView.listCellBackgroundColor = [UIColor whiteColor]; listContainerView.frame = CGRectMake(0.0f,categoryBgV.mj_h, KScreenWidth, KScreenHeight - categoryBgV.mj_h - TabbarHeight); [self.view addSubview:listContainerView]; categoryView.listContainer = listContainerView; // self.zhidingBtn.frame = CGRectMake(KScreenWidth - 16 - 24 - 10 - 24,(LZCategoryViewHeight - 44) / 2.0f + StatusBarHeight + 13,26,26); // [categoryBgV addSubview: self.zhidingBtn]; self.searchBtn.frame = CGRectMake(KScreenWidth - 16 - 69,(LZCategoryViewHeight - 44) / 2.0f + StatusBarHeight,69,44); [categoryBgV addSubview:self.searchBtn]; [self.searchBtn addSubview:self.searchLabel]; [self.searchLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.searchBtn).offset(8); make.centerY.equalTo(self.searchBtn).offset(3); }]; } - (CGFloat)preferredCategoryViewHeight { //return (LZCategoryViewHeight + StatusBarHeight + adapt(90) + adapt(56) + 30); return (LZCategoryViewHeight + StatusBarHeight); } -(void)zhidingClick{ [self.categoryView reloadData]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0); } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.viewModel judgementsIsOpenAdolescentModel]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navigationController.interactivePopGestureRecognizer.enabled = YES; } - (void)ym_setupViews{ [self.view setNeedsUpdateConstraints]; [self.view updateConstraintsIfNeeded]; } - (void)updateViewConstraints{ // [self.pagerView mas_makeConstraints:^(MASConstraintMaker *make) { // make.top.equalTo(self.view).offset(kYMStatusBarHeight); // make.left.equalTo(self.view); // make.right.equalTo(self.view); // make.bottom.equalTo(self.view); // }]; [super updateViewConstraints]; } - (void)ym_bindViewModel{ [self.bannerView ym_bindViewModel:self.viewModel.bannerVM]; self.viewModel.refreshHomeListData = ^{ NSLog(@"刷新首页数据"); [OCNotificationCenter postNotificationName:REFRESH_HOME_NOTIFICATION object:nil userInfo:@{}]; }; [[YMGlobalUtils shared] getConfig]; // if([self.viewModel isFemaleGender]){ // self.zhidingBtn.hidden = false; // }else{ // self.zhidingBtn.hidden = true; // } [self headerRefreshing]; } /// 更新在线状态 - (void)updateOnline{ if (self->_timer) { dispatch_source_cancel(self->_timer); } if ([LCSaveData getTokenString] == nil) { return; } [LCHttpHelper requestWithURLString:onlineUpdate parameters:nil needToken:YES type:HttpRequestTypePost success:^(id responseObject) { NSDictionary* dict = (NSDictionary*)responseObject; NSInteger code = [[dict objectForKey:@"code"] integerValue]; if (code==0) {//成功 NSInteger user_online_open = [[[dict objectForKey:@"data"]objectForKey:@"user_online_open"] integerValue]; int user_online_time = [[[dict objectForKey:@"data"]objectForKey:@"user_online_time"] intValue]; if (user_online_open == 1) { __block int timeout= user_online_time; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); self->_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); dispatch_source_set_timer(self->_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行 dispatch_source_set_event_handler(self->_timer, ^{ if(timeout<=0){ dispatch_source_cancel(self->_timer); dispatch_async(dispatch_get_main_queue(), ^{ [self updateOnline]; }); }else{ // NSString *strTime = [NSString stringWithFormat:@"%.2dS",timeout]; dispatch_async(dispatch_get_main_queue(), ^{ //设置界面的按钮显示 根据自己需求设置 //NSLog(@"strTime strTime %@",strTime); //NSLog(@"当前时间挫%lld",[[LCTools getCurrentTimestamp] longLongValue]); }); timeout--; }}); dispatch_resume(self->_timer); } } } failure:^(NSError *error) { }]; } - (void)headerRefreshing{ [self.viewModel getAdvertData]; // [self.viewModel getLevelIconData]; [self.viewModel getBadgesAndNobilityIconData]; [self.viewModel.bannerVM getOnTvData]; [OCNotificationCenter postNotificationName:REFRESH_HOME_NOTIFICATION object:nil userInfo:@{}]; } - (YMHomePageBannerView *)bannerView{ if (!_bannerView) { _bannerView = [[YMHomePageBannerView alloc]init]; @weakify(self) _bannerView.bannerViewHeightBlock = ^(CGFloat bannerViewHeight) { @strongify(self) self.bannerViewHeight = bannerViewHeight; }; } return _bannerView; } - (UILabel *)searchLabel { if (!_searchLabel) { _searchLabel = [[UILabel alloc] init]; _searchLabel.text = @"寻找"; _searchLabel.textColor = UIColor.whiteColor; _searchLabel.font = LCFont(11); } return _searchLabel; } - (UIButton *)searchBtn{ if (!_searchBtn) { _searchBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_searchBtn setImage:ImageByName(@"ym_home_page_xunzhao") forState:UIControlStateNormal]; WS(weakSelf) [[[_searchBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) { [weakSelf.viewModel gotoSearchUser]; }]; } return _searchBtn; } - (UIButton *)zhidingBtn{ if (!_zhidingBtn) { _zhidingBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_zhidingBtn setImage:ImageByName(@"home_msg_zhiding") forState:UIControlStateNormal]; _zhidingBtn.hidden = true; WS(weakSelf) [[[_zhidingBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) { [weakSelf.viewModel zhidingData]; }]; } return _zhidingBtn; } #pragma mark - JXCategoryListContainerViewDelegate - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { return self.titles.count; } - (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { YMHomeChildController *childVC = [[YMHomeChildController alloc] initWithViewModel:self.viewModel.homePageVMListDataArray[index]]; childVC.jxCategoryPageIndex = index; return childVC; } - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index{ self.selectIndex = index; } - (NSArray *)titles{ BOOL isFemaleGender = [OCUserDefaults boolForKey:kIS_FEMALE_GENDER]; if (isFemaleGender) { return @[@"男神",@"在线"]; } else { return @[@"推荐",@"在线"]; } } @end