YMHomeController.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. //
  2. // YMHomeController.m
  3. // MSYOUPAI
  4. //
  5. // Created by You on 2024/4/18.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMHomeController.h"
  9. #import "YMHomePageViewModel.h"
  10. #import "YMHomePageBannerView.h"
  11. #import "YMHomeChildController.h"
  12. #define LZCategoryViewHeight 54.0f
  13. @interface YMHomeController ()<JXCategoryViewDelegate,JXCategoryListContainerViewDelegate>
  14. {
  15. dispatch_source_t _timer;
  16. }
  17. /// 首页VM
  18. @property (nonatomic, strong) YMHomePageViewModel *viewModel;
  19. /// 首页Banner视图
  20. @property (nonatomic, strong) YMHomePageBannerView *bannerView;
  21. @property (nonatomic, strong) JXCategoryTitleView *categoryView;
  22. /// 搜索按钮
  23. @property (nonatomic, strong) UILabel *searchLabel;
  24. /// 搜索按钮
  25. @property (nonatomic, strong) UIButton *searchBtn;
  26. @property (nonatomic, strong) UIButton *zhidingBtn;
  27. /// banner视图高度
  28. @property (nonatomic, assign) CGFloat bannerViewHeight;
  29. @property (nonatomic, assign) NSInteger selectIndex;
  30. @end
  31. @implementation YMHomeController
  32. @dynamic viewModel;
  33. - (void)viewDidLoad {
  34. [super viewDidLoad];
  35. [self setNavHidden:YES];
  36. self.selectIndex = 0;
  37. [OCNotificationCenter addObserver:self selector:@selector(updateOnline) name:@"youpaifuserOnlineUpdate" object:nil];
  38. UIView *categoryBgV = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, KScreenWidth,[self preferredCategoryViewHeight])];
  39. [self.view addSubview:categoryBgV];
  40. // UIImageView *homeImgV = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, KScreenWidth,adapt(170))];
  41. // homeImgV.userInteractionEnabled = true;
  42. // homeImgV.image = [UIImage imageNamed:@"home_top_bg"];
  43. // [categoryBgV addSubview:homeImgV];
  44. JXCategoryTitleView *categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0.0f, StatusBarHeight, KScreenWidth - 16 * 2.0f - 24, LZCategoryViewHeight)];
  45. categoryView.backgroundColor = [UIColor clearColor];
  46. categoryView.titles = self.titles;
  47. categoryView.delegate = self;
  48. categoryView.titleSelectedColor = DecColorFromRGBA(0, 0, 0, 1);
  49. categoryView.titleColor = DecColorFromRGBA(0, 0, 0, 0.5);
  50. categoryView.titleColorGradientEnabled = YES;
  51. categoryView.titleFont = LCFont(18.0f);
  52. categoryView.titleSelectedFont = LCBoldFont(18.0f);
  53. categoryView.cellWidth = adapt(53);
  54. categoryView.cellSpacing = 0;
  55. categoryView.contentEdgeInsetLeft = 15;
  56. categoryView.averageCellSpacingEnabled = NO;
  57. [categoryBgV addSubview:categoryView];
  58. self.categoryView = categoryView;
  59. JXCategoryIndicatorImageView *indicatorImageView = [[JXCategoryIndicatorImageView alloc] init];
  60. indicatorImageView.indicatorImageViewSize = CGSizeMake(adapt(68), 44);
  61. UIImageView *indicatorImgv = [[UIImageView alloc] init];
  62. indicatorImgv.image = [UIImage imageNamed:@"home_indicator_img"];
  63. indicatorImgv.contentMode = UIViewContentModeScaleAspectFit;
  64. [indicatorImageView addSubview:indicatorImgv];
  65. [indicatorImgv mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.center.equalTo(indicatorImageView);
  67. make.width.mas_equalTo(46);
  68. make.height.mas_equalTo(32);
  69. }];
  70. categoryView.indicators = @[indicatorImageView];
  71. // UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, StatusBarHeight + LZCategoryViewHeight, KScreenWidth, (adapt(90) + adapt(56) + 30))];
  72. // [categoryBgV addSubview:topView];
  73. // self.bannerView.frame = topView.bounds;
  74. // [topView addSubview: self.bannerView];
  75. // self.bannerView.frame = CGRectZero;
  76. // self.bannerView.hidden = YES;
  77. JXCategoryListContainerView *listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_CollectionView delegate:self];
  78. // listContainerView.listCellBackgroundColor = [UIColor whiteColor];
  79. listContainerView.frame = CGRectMake(0.0f,categoryBgV.mj_h, KScreenWidth, KScreenHeight - categoryBgV.mj_h - TabbarHeight);
  80. [self.view addSubview:listContainerView];
  81. categoryView.listContainer = listContainerView;
  82. // self.zhidingBtn.frame = CGRectMake(KScreenWidth - 16 - 24 - 10 - 24,(LZCategoryViewHeight - 44) / 2.0f + StatusBarHeight + 13,26,26);
  83. // [categoryBgV addSubview: self.zhidingBtn];
  84. self.searchBtn.frame = CGRectMake(KScreenWidth - 16 - 69,(LZCategoryViewHeight - 44) / 2.0f + StatusBarHeight,69,44);
  85. [categoryBgV addSubview:self.searchBtn];
  86. [self.searchBtn addSubview:self.searchLabel];
  87. [self.searchLabel mas_makeConstraints:^(MASConstraintMaker *make) {
  88. make.left.equalTo(self.searchBtn).offset(8);
  89. make.centerY.equalTo(self.searchBtn).offset(3);
  90. }];
  91. }
  92. - (CGFloat)preferredCategoryViewHeight {
  93. //return (LZCategoryViewHeight + StatusBarHeight + adapt(90) + adapt(56) + 30);
  94. return (LZCategoryViewHeight + StatusBarHeight);
  95. }
  96. -(void)zhidingClick{
  97. [self.categoryView reloadData];
  98. }
  99. - (void)viewDidAppear:(BOOL)animated {
  100. [super viewDidAppear:animated];
  101. // self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
  102. }
  103. - (void)viewWillAppear:(BOOL)animated{
  104. [super viewWillAppear:animated];
  105. [self.viewModel judgementsIsOpenAdolescentModel];
  106. }
  107. - (void)viewWillDisappear:(BOOL)animated{
  108. [super viewWillDisappear:animated];
  109. self.navigationController.interactivePopGestureRecognizer.enabled = YES;
  110. }
  111. - (void)ym_setupViews{
  112. [self.view setNeedsUpdateConstraints];
  113. [self.view updateConstraintsIfNeeded];
  114. }
  115. - (void)updateViewConstraints{
  116. // [self.pagerView mas_makeConstraints:^(MASConstraintMaker *make) {
  117. // make.top.equalTo(self.view).offset(kYMStatusBarHeight);
  118. // make.left.equalTo(self.view);
  119. // make.right.equalTo(self.view);
  120. // make.bottom.equalTo(self.view);
  121. // }];
  122. [super updateViewConstraints];
  123. }
  124. - (void)ym_bindViewModel{
  125. [self.bannerView ym_bindViewModel:self.viewModel.bannerVM];
  126. self.viewModel.refreshHomeListData = ^{
  127. NSLog(@"刷新首页数据");
  128. [OCNotificationCenter postNotificationName:REFRESH_HOME_NOTIFICATION object:nil userInfo:@{}];
  129. };
  130. [[YMGlobalUtils shared] getConfig];
  131. // if([self.viewModel isFemaleGender]){
  132. // self.zhidingBtn.hidden = false;
  133. // }else{
  134. // self.zhidingBtn.hidden = true;
  135. // }
  136. [self headerRefreshing];
  137. }
  138. /// 更新在线状态
  139. - (void)updateOnline{
  140. if (self->_timer) {
  141. dispatch_source_cancel(self->_timer);
  142. }
  143. if ([LCSaveData getTokenString] == nil) {
  144. return;
  145. }
  146. [LCHttpHelper requestWithURLString:onlineUpdate parameters:nil needToken:YES type:HttpRequestTypePost success:^(id responseObject) {
  147. NSDictionary* dict = (NSDictionary*)responseObject;
  148. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  149. if (code==0) {//成功
  150. NSInteger user_online_open = [[[dict objectForKey:@"data"]objectForKey:@"user_online_open"] integerValue];
  151. int user_online_time = [[[dict objectForKey:@"data"]objectForKey:@"user_online_time"] intValue];
  152. if (user_online_open == 1) {
  153. __block int timeout= user_online_time;
  154. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  155. self->_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
  156. dispatch_source_set_timer(self->_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  157. dispatch_source_set_event_handler(self->_timer, ^{
  158. if(timeout<=0){
  159. dispatch_source_cancel(self->_timer);
  160. dispatch_async(dispatch_get_main_queue(), ^{
  161. [self updateOnline];
  162. });
  163. }else{
  164. // NSString *strTime = [NSString stringWithFormat:@"%.2dS",timeout];
  165. dispatch_async(dispatch_get_main_queue(), ^{
  166. //设置界面的按钮显示 根据自己需求设置
  167. //NSLog(@"strTime strTime %@",strTime);
  168. //NSLog(@"当前时间挫%lld",[[LCTools getCurrentTimestamp] longLongValue]);
  169. });
  170. timeout--;
  171. }});
  172. dispatch_resume(self->_timer);
  173. }
  174. }
  175. } failure:^(NSError *error) {
  176. }];
  177. }
  178. - (void)headerRefreshing{
  179. [self.viewModel getAdvertData];
  180. // [self.viewModel getLevelIconData];
  181. [self.viewModel getBadgesAndNobilityIconData];
  182. [self.viewModel.bannerVM getOnTvData];
  183. [OCNotificationCenter postNotificationName:REFRESH_HOME_NOTIFICATION object:nil userInfo:@{}];
  184. }
  185. - (YMHomePageBannerView *)bannerView{
  186. if (!_bannerView) {
  187. _bannerView = [[YMHomePageBannerView alloc]init];
  188. @weakify(self)
  189. _bannerView.bannerViewHeightBlock = ^(CGFloat bannerViewHeight) {
  190. @strongify(self)
  191. self.bannerViewHeight = bannerViewHeight;
  192. };
  193. }
  194. return _bannerView;
  195. }
  196. - (UILabel *)searchLabel {
  197. if (!_searchLabel) {
  198. _searchLabel = [[UILabel alloc] init];
  199. _searchLabel.text = @"寻找";
  200. _searchLabel.textColor = UIColor.whiteColor;
  201. _searchLabel.font = LCFont(11);
  202. }
  203. return _searchLabel;
  204. }
  205. - (UIButton *)searchBtn{
  206. if (!_searchBtn) {
  207. _searchBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  208. [_searchBtn setImage:ImageByName(@"ym_home_page_xunzhao") forState:UIControlStateNormal];
  209. WS(weakSelf)
  210. [[[_searchBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  211. [weakSelf.viewModel gotoSearchUser];
  212. }];
  213. }
  214. return _searchBtn;
  215. }
  216. - (UIButton *)zhidingBtn{
  217. if (!_zhidingBtn) {
  218. _zhidingBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  219. [_zhidingBtn setImage:ImageByName(@"home_msg_zhiding") forState:UIControlStateNormal];
  220. _zhidingBtn.hidden = true;
  221. WS(weakSelf)
  222. [[[_zhidingBtn rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIButton * _Nullable sender) {
  223. [weakSelf.viewModel zhidingData];
  224. }];
  225. }
  226. return _zhidingBtn;
  227. }
  228. #pragma mark - JXCategoryListContainerViewDelegate
  229. - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView {
  230. return self.titles.count;
  231. }
  232. - (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
  233. YMHomeChildController *childVC = [[YMHomeChildController alloc] initWithViewModel:self.viewModel.homePageVMListDataArray[index]];
  234. childVC.jxCategoryPageIndex = index;
  235. return childVC;
  236. }
  237. - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index{
  238. self.selectIndex = index;
  239. }
  240. - (NSArray <NSString *> *)titles{
  241. BOOL isFemaleGender = [OCUserDefaults boolForKey:kIS_FEMALE_GENDER];
  242. if (isFemaleGender) {
  243. return @[@"男神",@"在线"];
  244. } else {
  245. return @[@"推荐",@"在线"];
  246. }
  247. }
  248. @end