YBHomeViewController.m 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. //
  2. // YBHomeViewController.m
  3. // YBVideo
  4. //
  5. // Created by YB007 on 2022/5/28.
  6. // Copyright © 2022 cat. All rights reserved.
  7. //
  8. #import "YBHomeViewController.h"
  9. #import <TYTabPagerBar.h>
  10. #import <TYPagerController.h>
  11. #import "ShopMallVC.h"
  12. #import "myVideoV.h"
  13. #import "MyFollowViewController.h"
  14. #import "searchVC.h"
  15. #import <JMessage/JMessage.h>
  16. #import "YBLiveListVC.h"
  17. #import "YBLookVideoVC.h"
  18. #import "YBVideosVC.h"
  19. #import <AFNetworkReachabilityManager.h>
  20. #import <AudioToolbox/AudioToolbox.h>
  21. @interface YBHomeViewController ()<TYTabPagerBarDelegate,TYTabPagerBarDataSource,TYPagerControllerDelegate,TYPagerControllerDataSource,V2TIMConversationListener,V2TIMAdvancedMsgListener>
  22. {
  23. YBLookVideoVC *_ybLook;
  24. UIImageView *mask_top;
  25. }
  26. @property(nonatomic,strong)NSArray *baseArray;
  27. @property(nonatomic,strong)TYTabPagerBar *tabBar;
  28. @property(nonatomic,strong)TYPagerController *pagerController;
  29. @property(nonatomic,strong)NSArray *dataArray;
  30. @property(nonatomic,strong)UIButton *search;
  31. @property(nonatomic,strong)UIButton *liveBtn;
  32. @property(nonatomic,strong)NSString *pageTagStr;//0-推荐 1-热门 2-附近 //rk_1-30
  33. @end
  34. @implementation YBHomeViewController
  35. SystemSoundID msgSoundID = 0;
  36. -(void)viewWillAppear:(BOOL)animated{
  37. [super viewWillAppear:animated];
  38. [self getUnreadCound];
  39. // 青少年
  40. [[YBYoungManager shareInstance] checkYoungStatus:YoungFrom_Home];
  41. }
  42. -(void)viewDidAppear:(BOOL)animated{
  43. [super viewDidAppear:animated];
  44. }
  45. -(void)viewWillDisappear:(BOOL)animated{
  46. [super viewWillDisappear:animated];
  47. //9-27
  48. [self getUnreadCound];
  49. }
  50. - (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount {
  51. [self getUnreadCound];
  52. }
  53. - (void)viewDidLoad {
  54. [super viewDidLoad];
  55. self.naviView.hidden = YES;
  56. self.view.backgroundColor = UIColor.whiteColor;
  57. [Config saveCurrentIsShop:NO];
  58. TYTabPagerBar *tabBar = [[TYTabPagerBar alloc]init];
  59. tabBar.dataSource = self;
  60. tabBar.delegate = self;
  61. tabBar.layout.barStyle = TYPagerBarStyleProgressView;
  62. tabBar.layout.selectedTextColor = UIColor.whiteColor;
  63. tabBar.layout.normalTextColor = UIColor.whiteColor;
  64. tabBar.layout.selectedTextFont = [UIFont boldSystemFontOfSize:22];
  65. tabBar.layout.normalTextFont = [UIFont boldSystemFontOfSize:19];
  66. tabBar.layout.progressColor = UIColor.whiteColor;
  67. tabBar.layout.progressHeight = 4;
  68. tabBar.layout.progressRadius = 2;
  69. tabBar.layout.progressHorEdging = 10;
  70. tabBar.layout.progressVerEdging = 5;
  71. tabBar.layout.cellWidth = 0;
  72. tabBar.layout.cellSpacing = 0;
  73. tabBar.backgroundColor = UIColor.clearColor;
  74. [tabBar registerClass:[TYTabPagerBarCell class] forCellWithReuseIdentifier:[TYTabPagerBarCell cellIdentifier]];
  75. [self.view addSubview:tabBar];
  76. _tabBar = tabBar;
  77. TYPagerController *pagerController = [[TYPagerController alloc] init];
  78. pagerController.dataSource = self;
  79. pagerController.delegate = self;
  80. pagerController.layout.adjustScrollViewInset = NO;
  81. [self addChildViewController:pagerController];
  82. [self.view addSubview:pagerController.view];
  83. _pagerController = pagerController;
  84. mask_top = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, _window_width, 100+statusbarHeight)];
  85. [mask_top setImage:[UIImage imageNamed:@"home_mask_top"]];
  86. [self.view addSubview:mask_top];
  87. UIImageView* mask_buttom = [[UIImageView alloc] initWithFrame:CGRectMake(0, _window_height-49-ShowDiff-44, _window_width, 49)];
  88. [mask_buttom setImage:[UIImage imageNamed:@"home_mask_bottom"]];
  89. mask_buttom.userInteractionEnabled = YES;
  90. [self.view addSubview:mask_buttom];
  91. mask_buttom.hidden = YES;
  92. [self.view bringSubviewToFront:tabBar];
  93. [self.view addSubview:self.search];
  94. [self.view addSubview:self.liveBtn];
  95. [self registVoice];
  96. [self infoSet:NO];
  97. [self netMonitoring];
  98. //获取未读消息
  99. [[V2TIMManager sharedInstance] addConversationListener:self];
  100. [[V2TIMManager sharedInstance]addAdvancedMsgListener:self];
  101. //rk_1-30
  102. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(doubleClickRefresh) name:DoubleClickRefreshNot object:nil];
  103. //rk_net
  104. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(needRefreshPage) name:@"FirstGetVideoClass" object:nil];
  105. //邀请码
  106. [YBInviteCode checkAgent];
  107. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(needRefreshPage) name:@"topTabbarScrolUnEnable" object:nil];
  108. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(needRefreshPage) name:@"topTabbarScrolEnable" object:nil];
  109. }
  110. -(void)topTabbarScrolUnEnable{
  111. _tabBar.userInteractionEnabled =NO;
  112. _pagerController.scrollView.scrollEnabled = NO;
  113. }
  114. -(void)topTabbarScrolEnable{
  115. _tabBar.userInteractionEnabled =YES;
  116. _pagerController.scrollView.scrollEnabled = YES;
  117. }
  118. - (void)viewWillLayoutSubviews {
  119. [super viewWillLayoutSubviews];
  120. _tabBar.frame = CGRectMake(50, statusbarHeight+20, _window_width-105, 44);
  121. _pagerController.view.frame = CGRectMake(0, 0, _window_width, _window_height-49-ShowDiff);
  122. }
  123. -(void)dealloc {
  124. [[NSNotificationCenter defaultCenter]removeObserver:self];
  125. }
  126. -(void)doubleClickRefresh {
  127. //是首页并且是推荐才执行双击刷新
  128. if ([_pageTagStr isEqual:@"0"]) {
  129. [_ybLook doubleClickRefreshForYou];
  130. }
  131. }
  132. //rk_net
  133. -(void)needRefreshPage {
  134. [self infoSet:YES];
  135. }
  136. //rk_net
  137. -(void)infoSet:(BOOL)refresh {
  138. NSArray *videoClass = [NSArray arrayWithArray:[common getVideoClass]];
  139. _baseArray = [NSArray arrayWithObjects:YZMsg(@"推荐"),YZMsg(@"热门"),YZMsg(@"关注"),YZMsg(@"商城"),nil];
  140. NSMutableArray *m_array = [NSMutableArray array];
  141. [m_array addObjectsFromArray:_baseArray];
  142. for (NSDictionary *classDic in videoClass) {
  143. NSString *title = minstr([classDic valueForKey:@"title"]);
  144. [m_array addObject:title];
  145. }
  146. self.dataArray = [NSArray arrayWithArray:m_array];
  147. if (refresh && videoClass.count > 0) {
  148. //第一安装由于网络权限问题顶部分类未显示,这里收到通知刷新
  149. [[AFNetworkReachabilityManager sharedManager]stopMonitoring];
  150. [_tabBar reloadData];
  151. [_pagerController updateData];
  152. }else{
  153. [_tabBar reloadData];
  154. [_pagerController reloadData];
  155. }
  156. }
  157. -(UIButton *)search {
  158. if (!_search) {
  159. _search = [UIButton buttonWithType:0];
  160. [_search setImage:[UIImage imageNamed:@"home_search"] forState:0];
  161. _search.frame = CGRectMake(10, 20+statusbarHeight, 40, 40);
  162. [_search addTarget:self action:@selector(doSearchBtn) forControlEvents:UIControlEventTouchUpInside];
  163. }
  164. return _search;
  165. }
  166. - (UIButton *)liveBtn {
  167. if (!_liveBtn) {
  168. _liveBtn = [UIButton buttonWithType:0];
  169. [_liveBtn setImage:[UIImage imageNamed:@"直播广场"] forState:0];
  170. _liveBtn.frame = CGRectMake(_window_width-50, 20+statusbarHeight, 40, 40);
  171. [_liveBtn addTarget:self action:@selector(doLiveBtn) forControlEvents:UIControlEventTouchUpInside];
  172. }
  173. return _liveBtn;
  174. }
  175. #pragma mark - 点击事件
  176. -(void)doSearchBtn {
  177. // if ([[Config getOwnID] intValue]<=0 && [Config getTranslate]) {
  178. // return;
  179. // }
  180. searchVC *search = [[searchVC alloc]init];
  181. search.searchFrom = SearchFrom_Home;
  182. [[YBBaseAppDelegate sharedAppDelegate]pushViewController:search animated:YES];
  183. }
  184. -(void)doLiveBtn {
  185. // if ([[Config getOwnID] intValue]<=0 && [Config getTranslate]) {
  186. // return;
  187. // }
  188. YBLiveListVC *lVC = [[YBLiveListVC alloc]init];
  189. [[YBBaseAppDelegate sharedAppDelegate]pushViewController:lVC animated:YES];
  190. }
  191. -(void)scrollToIdx:(int)idx refresh:(BOOL)refresh{
  192. [_pagerController scrollToControllerAtIndex:idx animate:NO];
  193. if (refresh) {
  194. [_ybLook youngModeRefresh];
  195. }
  196. }
  197. #pragma mark - TYTabPagerBarDataSource
  198. - (NSInteger)numberOfItemsInPagerTabBar {
  199. return _dataArray.count;
  200. }
  201. - (UICollectionViewCell<TYTabPagerBarCellProtocol> *)pagerTabBar:(TYTabPagerBar *)pagerTabBar cellForItemAtIndex:(NSInteger)index {
  202. UICollectionViewCell<TYTabPagerBarCellProtocol> *cell = [pagerTabBar dequeueReusableCellWithReuseIdentifier:[TYTabPagerBarCell cellIdentifier] forIndex:index];
  203. cell.titleLabel.text = _dataArray[index];
  204. return cell;
  205. }
  206. #pragma mark - TYTabPagerBarDelegate
  207. - (CGFloat)pagerTabBar:(TYTabPagerBar *)pagerTabBar widthForItemAtIndex:(NSInteger)index {
  208. NSString *title = _dataArray[index];
  209. return [pagerTabBar cellWidthForTitle:title];
  210. }
  211. - (void)pagerTabBar:(TYTabPagerBar *)pagerTabBar didSelectItemAtIndex:(NSInteger)index {
  212. [_pagerController scrollToControllerAtIndex:index animate:YES];
  213. if(index == 3){
  214. mask_top.hidden = YES;
  215. _tabBar.layout.selectedTextColor = UIColor.blackColor;
  216. _tabBar.layout.normalTextColor = UIColor.grayColor;
  217. _tabBar.layout.progressColor = UIColor.blackColor;
  218. [_search setImage:[UIImage imageNamed:@"home_search_black"] forState:0];
  219. [_liveBtn setImage:[UIImage imageNamed:@"直播广场_black"] forState:0];
  220. [Config saveCurrentIsShop:YES];
  221. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  222. [[NSNotificationCenter defaultCenter]postNotificationName:@"changTabBarColor" object:@"1"];
  223. // });
  224. }else{
  225. mask_top.hidden = NO;
  226. _tabBar.layout.selectedTextColor = UIColor.whiteColor;
  227. _tabBar.layout.normalTextColor = UIColor.whiteColor;
  228. _tabBar.layout.progressColor = UIColor.whiteColor;
  229. [_search setImage:[UIImage imageNamed:@"home_search"] forState:0];
  230. [_liveBtn setImage:[UIImage imageNamed:@"直播广场"] forState:0];
  231. [Config saveCurrentIsShop:NO];
  232. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  233. [[NSNotificationCenter defaultCenter]postNotificationName:@"changTabBarColor" object:@"0"];
  234. // });
  235. }
  236. [_tabBar reloadData];
  237. }
  238. #pragma mark - TYPagerControllerDataSource
  239. - (NSInteger)numberOfControllersInPagerController {
  240. return _dataArray.count;
  241. }
  242. - (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index prefetching:(BOOL)prefetching {
  243. _pageTagStr = [NSString stringWithFormat:@"%ld",index];
  244. if(index == 0){
  245. _pageTagStr = @"0";
  246. _ybLook = [[YBLookVideoVC alloc]init];
  247. // _ybLook.sourceBaseUrl = [NSString stringWithFormat:@"Video.getRecommendVideos&uid=%@",[Config getOwnID]];
  248. _ybLook.sourceBaseUrl = [NSString stringWithFormat:@"Video.getRecommendVideos&uid=%@&mobileid=%@",[Config getOwnID],[PublicObj getDeviceUUID]];
  249. _ybLook.scrollViewDirection = ZFPlayerScrollViewDirectionVertical;
  250. return _ybLook;
  251. } else if(index == 1) {
  252. _pageTagStr = @"1";
  253. myVideoV *videoVC= [[myVideoV alloc]init];
  254. NSString *url = [NSString stringWithFormat:@"Video.getVideoList&uid=%@&type=0",[Config getOwnID]];
  255. videoVC.url = url;
  256. videoVC.view.frame = CGRectMake(0,64+statusbarHeight, _window_width, _window_height-64-statusbarHeight-49-ShowDiff);
  257. videoVC.ismyvideo = 0;
  258. return videoVC;
  259. }else if(index == 2) {
  260. _pageTagStr = @"2";
  261. /*
  262. NearbyVC *videoVC= [[NearbyVC alloc]init];
  263. NSString *url = [NSString stringWithFormat:@"Video.getNearby&uid=%@&lng=%@&lat=%@",[Config getOwnID],[cityDefault getLocationLng],[cityDefault getLocationLat]];
  264. videoVC.url = url;
  265. return videoVC;
  266. */
  267. MyFollowViewController *videoVC = [[MyFollowViewController alloc]init];
  268. videoVC.url = @"video.getAttentionVideo";
  269. return videoVC;
  270. }else if(index == 3) {
  271. ShopMallVC *shopmall = [[ShopMallVC alloc]init];
  272. return shopmall;
  273. }else{
  274. int showIndex = (int)index - (int)_baseArray.count;
  275. if (showIndex < 0 ) {
  276. showIndex = 0;
  277. }
  278. NSDictionary *subDic = @{};
  279. if ([common getVideoClass].count > showIndex) {
  280. subDic = [common getVideoClass][showIndex];
  281. }
  282. YBVideosVC *classVC = [[YBVideosVC alloc]init];
  283. classVC.classID = minstr([subDic valueForKey:@"id"]);
  284. return classVC;
  285. }
  286. }
  287. #pragma mark - TYPagerControllerDelegate
  288. - (void)pagerController:(TYPagerController *)pagerController transitionFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex animated:(BOOL)animated {
  289. // if ([[Config getOwnID] intValue]<=0 && [Config getTranslate]) {
  290. // [_pagerController scrollToControllerAtIndex:0 animate:NO];
  291. // return;
  292. // }
  293. NSLog(@"TOIDNEX======:%ld",toIndex);
  294. [_tabBar scrollToItemFromIndex:fromIndex toIndex:toIndex animate:animated];
  295. if(toIndex == 3){
  296. mask_top.hidden = YES;
  297. [Config saveCurrentIsShop:YES];
  298. _tabBar.layout.selectedTextColor = UIColor.blackColor;
  299. _tabBar.layout.normalTextColor = UIColor.grayColor;
  300. _tabBar.layout.progressColor = UIColor.blackColor;
  301. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  302. [[NSNotificationCenter defaultCenter]postNotificationName:@"changTabBarColor" object:@"1"];
  303. // });
  304. [_search setImage:[UIImage imageNamed:@"home_search_black"] forState:0];
  305. [_liveBtn setImage:[UIImage imageNamed:@"直播广场_black"] forState:0];
  306. }else{
  307. mask_top.hidden = NO;
  308. [Config saveCurrentIsShop:NO];
  309. _tabBar.layout.selectedTextColor = UIColor.whiteColor;
  310. _tabBar.layout.normalTextColor = UIColor.whiteColor;
  311. _tabBar.layout.progressColor = UIColor.whiteColor;
  312. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  313. [[NSNotificationCenter defaultCenter]postNotificationName:@"changTabBarColor" object:@"0"];
  314. // });
  315. [_search setImage:[UIImage imageNamed:@"home_search"] forState:0];
  316. [_liveBtn setImage:[UIImage imageNamed:@"直播广场"] forState:0];
  317. }
  318. [_tabBar reloadData];
  319. }
  320. -(void)pagerController:(TYPagerController *)pagerController transitionFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex progress:(CGFloat)progress {
  321. // if ([[Config getOwnID] intValue]<=0 && [Config getTranslate]) {
  322. // [_pagerController scrollToControllerAtIndex:0 animate:NO];
  323. // return;
  324. // }
  325. NSLog(@"transitionFromIndex======:%ld",toIndex);
  326. [_tabBar scrollToItemFromIndex:fromIndex toIndex:toIndex progress:progress];
  327. // NSInteger realIndex = progress>0.5?toIndex:fromIndex;
  328. }
  329. #pragma mark - tab 加提示数量 start
  330. -(void)getUnreadCound {
  331. __block NSInteger unRead = 0;
  332. [[YBImManager shareInstance]getAllUnredNumExceptUser:@[@"dsp_user_"] complete:^(int allUnread) {
  333. unRead = allUnread;
  334. dispatch_async(dispatch_get_main_queue(), ^{
  335. [PublicObj setTabbarBadgeValue:(int)unRead];
  336. /*
  337. YBTabBarController *tabbar = [PublicObj currentTabbar];
  338. UITabBarItem *item = [[[tabbar tabBar] items] objectAtIndex:3];
  339. //设置item角标数字
  340. if (unRead == 0) {
  341. item.badgeValue= nil;
  342. }else{
  343. item.badgeValue= [NSString stringWithFormat:@"%ld",unRead];
  344. }
  345. */
  346. });
  347. }];
  348. }
  349. -(void)onRecvNewMessage:(V2TIMMessage *)msg
  350. {
  351. NSString *fromeName = minstr(msg.sender);
  352. // if ([PublicObj checkNull:fromeName]) {
  353. // fromeName = minstr(msg.fromUser.username);
  354. // }
  355. // //2020-12-17调整为用户私信不提示
  356. // if ([fromeName containsString:@"dsp_admin_1"] ||
  357. // [fromeName containsString:@"dsp_admin_2"] ||
  358. // [fromeName containsString:@"dsp_fans"] ||
  359. // [fromeName containsString:@"dsp_like"] ||
  360. // [fromeName containsString:@"dsp_at"] ||
  361. // [fromeName containsString:@"dsp_comment"]||
  362. // [fromeName containsString:@"goodsorder_admin"]
  363. // ) {
  364. [self playVoice];
  365. // }
  366. }
  367. -(void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{
  368. [self getUnreadCound];
  369. NSString *fromeName = minstr(message.fromName);
  370. if ([PublicObj checkNull:fromeName]) {
  371. fromeName = minstr(message.fromUser.username);
  372. }
  373. //2020-12-17调整为用户私信不提示
  374. if ([fromeName containsString:@"dsp_admin_1"] ||
  375. [fromeName containsString:@"dsp_admin_2"] ||
  376. [fromeName containsString:@"dsp_fans"] ||
  377. [fromeName containsString:@"dsp_like"] ||
  378. [fromeName containsString:@"dsp_at"] ||
  379. [fromeName containsString:@"dsp_comment"]||
  380. [fromeName containsString:@"goodsorder_admin"]
  381. ) {
  382. [self playVoice];
  383. }
  384. }
  385. -(void)registVoice {
  386. // NSURL *soundUrl = [[NSBundle mainBundle] URLForResource:@"messageVioce" withExtension:@"mp3"];
  387. NSString *path = [[NSBundle mainBundle] pathForResource:@"messageVioce" ofType:@"mp3"];
  388. if (path) {
  389. NSURL *soundUrl = [NSURL fileURLWithPath:path];
  390. AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl,&msgSoundID);
  391. }
  392. }
  393. - (void)playVoice{
  394. //个中-设置开关,打开才播放
  395. if (![common getMsgVoiceSwitch]) {
  396. return;
  397. }
  398. AudioServicesPlaySystemSound(msgSoundID);
  399. }
  400. - (void)onReceiveMessageRetractEvent:(JMSGMessageRetractEvent *)retractEvent;{
  401. [self getUnreadCound];
  402. }
  403. -(void)netMonitoring {
  404. [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  405. switch (status) {
  406. case AFNetworkReachabilityStatusUnknown:
  407. break;
  408. case AFNetworkReachabilityStatusNotReachable:
  409. break;
  410. case AFNetworkReachabilityStatusReachableViaWWAN:
  411. [YBNetworking getVideoClass:YES];
  412. [_ybLook youngModeRefresh];
  413. break;
  414. case AFNetworkReachabilityStatusReachableViaWiFi:
  415. [YBNetworking getVideoClass:YES];
  416. [_ybLook youngModeRefresh];
  417. break;
  418. default:
  419. break;
  420. }
  421. }];
  422. [[AFNetworkReachabilityManager sharedManager] startMonitoring];
  423. }
  424. @end