RQHomeSubPageVideoScrollViewController.m 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. //
  2. // RQHomeSubPageVideoScrollViewController.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/11/11.
  6. //
  7. #import "RQHomeSubPageVideoScrollViewController.h"
  8. @interface RQHomeSubPageVideoScrollViewController ()
  9. /// viewModel
  10. @property (nonatomic, readonly, strong) RQHomeSubPageVideoScrollViewModel *viewModel;
  11. @property (nonatomic, readwrite, strong) JXPagerView *pagerView;
  12. @property (nonatomic, readwrite, strong) JXCategoryTitleView *categoryView;
  13. @property (nonatomic, readwrite, strong) NSArray <NSString *> *titles;
  14. @property (nonatomic, readwrite, strong) UIScrollView *currentListView;
  15. @property (nonatomic, readwrite, copy) void(^scrollCallback)(UIScrollView *scrollView);
  16. @end
  17. @implementation RQHomeSubPageVideoScrollViewController
  18. @dynamic viewModel;
  19. #pragma mark - SystemMethod
  20. - (void)viewDidLoad {
  21. [super viewDidLoad];
  22. /// 初始化
  23. [self rq_setup];
  24. }
  25. - (void)viewDidLayoutSubviews {
  26. [super viewDidLayoutSubviews];
  27. self.pagerView.frame = CGRectMake(0, 0, RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(194.f));
  28. }
  29. #pragma mark - PrivateMethods
  30. /// 初始化
  31. - (void)rq_setup {
  32. /// set up ...
  33. self.titles = [self.viewModel.videosItemArr.rac_sequence map:^id _Nullable(VideosItem *videosItem) {
  34. return videosItem.title;
  35. }].array;
  36. [self.view addSubview:self.pagerView];
  37. }
  38. #pragma mark - JXPagerViewDelegate
  39. - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
  40. return [UIView new];
  41. }
  42. - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
  43. return 0.f;
  44. }
  45. - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  46. return 0.f;
  47. }
  48. - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  49. return self.categoryView;
  50. }
  51. - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
  52. //和categoryView的item数量一致
  53. return self.categoryView.titles.count;
  54. }
  55. - (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
  56. @weakify(self);
  57. RQHomeSubPageVideoScrollSubViewModel *homeSubPageVideoScrollSubViewModel = [[RQHomeSubPageVideoScrollSubViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  58. RQViewModelUtilKey : self.viewModel.treeListModel,
  59. RQVideoItemIndexKey : @(self.viewModel.index),
  60. RQVideoItemIndexPathKey : [NSIndexPath indexPathForRow:index inSection:self.viewModel.myIndexPath.section],
  61. RQHomePageSubjectTypeKey : @(self.viewModel.homePageSubjectType),
  62. RQViewCommonValueKey : self.viewModel.videosItemArr[index],
  63. }];
  64. RQHomeSubPageVideoScrollSubViewController *homeSubPageVideoScrollSubViewController = [[RQHomeSubPageVideoScrollSubViewController alloc] initWithViewModel:homeSubPageVideoScrollSubViewModel];
  65. homeSubPageVideoScrollSubViewController.scrollCallback = ^(UIScrollView *scrollView) {
  66. @strongify(self);
  67. self.scrollCallback(scrollView);
  68. };
  69. self.currentListView = homeSubPageVideoScrollSubViewController.tableView;
  70. return homeSubPageVideoScrollSubViewController;
  71. }
  72. - (void)pagerView:(JXPagerView *)pagerView mainTableViewDidScroll:(UIScrollView *)scrollView {
  73. }
  74. #pragma mark - JXCategoryViewDelegate
  75. - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
  76. self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
  77. //根据选中的下标,实时更新currentListView
  78. RQHomeSubPageVideoScrollSubViewController *list = (RQHomeSubPageVideoScrollSubViewController *)self.pagerView.listContainerView.validListDict[@(index)];
  79. self.currentListView = list.tableView;
  80. }
  81. - (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index {
  82. }
  83. - (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index {
  84. }
  85. #pragma mark - JXPagerMainTableViewGestureDelegate
  86. - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  87. //禁止categoryView左右滑动的时候,上下和左右都可以滚动
  88. if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
  89. return NO;
  90. }
  91. return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
  92. }
  93. - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  94. !self.scrollCallback ?: self.scrollCallback(scrollView);
  95. }
  96. #pragma mark - JXPagingViewListViewDelegate
  97. - (UIView *)listView {
  98. return self.view;
  99. }
  100. - (UIScrollView *)listScrollView {
  101. return self.currentListView;
  102. }
  103. - (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback {
  104. self.scrollCallback = callback;
  105. }
  106. //- (void)listWillAppear {
  107. // NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd));
  108. //}
  109. //
  110. //- (void)listDidAppear {
  111. // NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd));
  112. //}
  113. //
  114. //- (void)listWillDisappear {
  115. // NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd));
  116. //}
  117. //
  118. //- (void)listDidDisappear {
  119. // NSLog(@"%@:%@", self.title, NSStringFromSelector(_cmd));
  120. //}
  121. - (void)listScrollViewWillResetContentOffset {
  122. //当前的listScrollView需要重置的时候,就把所有列表的contentOffset都重置了
  123. // for (RQHomePageSubjectOneOrFourViewController *list in self.pagerView.listContainerView.validListDict.allValues) {
  124. // list.collectionView.contentOffset = CGPointZero;
  125. // }
  126. }
  127. #pragma mark - LazyLoad
  128. - (JXPagerView *)pagerView {
  129. if (!_pagerView) {
  130. _pagerView = [[JXPagerView alloc] initWithDelegate:self];
  131. _pagerView.mainTableView.gestureDelegate = self;
  132. _pagerView.mainTableView.bounces = NO;
  133. _pagerView.listContainerView.categoryNestPagingEnabled = YES;
  134. _pagerView.listContainerView.frame = CGRectMake(0, RQHeightForPinSectionHeaderInPagerView, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - RQ_APPLICATION_TOP_BAR_HEIGHT - RQHeightForPinSectionHeaderInPagerView_One - RQHeightForPinSectionHeaderInPagerView - RQ_APPLICATION_TAB_BAR_HEIGHT - (RQ_COMMON_MANAGER.YYXC_SERVICE_OPEN? 0 : RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT));
  135. self.contentScrollView = _pagerView.listContainerView.contentScrollView;
  136. }
  137. return _pagerView;
  138. }
  139. - (JXCategoryTitleView *)categoryView {
  140. if (!_categoryView) {
  141. _categoryView = [[JXCategoryTitleView alloc] init];
  142. _categoryView.titles = self.titles;
  143. _categoryView.backgroundColor = [UIColor whiteColor];
  144. _categoryView.titleSelectedColor = RQ_MAIN_TEXT_COLOR_1;
  145. _categoryView.titleColor = RQ_MAIN_TEXT_COLOR_2;
  146. _categoryView.titleFont = RQRegularFont(13);
  147. _categoryView.titleSelectedFont = RQRegularFont(15);
  148. _categoryView.titleColorGradientEnabled = YES;
  149. _categoryView.titleLabelZoomEnabled = NO;
  150. _categoryView.contentScrollViewClickTransitionAnimationEnabled = NO;
  151. _categoryView.titleLabelZoomSelectedVerticalOffset = 0.0f;
  152. _categoryView.titleLabelVerticalOffset = 6.f;
  153. JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
  154. lineView.indicatorColor = RQ_MAIN_COLOR;
  155. lineView.indicatorWidth = 20;
  156. lineView.indicatorHeight = 4;
  157. _categoryView.indicators = @[lineView];
  158. _categoryView.defaultSelectedIndex = 0;
  159. _categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
  160. _categoryView.delegate = self;
  161. }
  162. return _categoryView;
  163. }
  164. - (NSArray<NSString *> *)titles {
  165. if (!_titles) {
  166. _titles = @[@"侧方停车", @"倒车入库", @"坡道定点\n停车与起步", @"曲线行驶", @"直角转弯"];
  167. }
  168. return _titles;
  169. }
  170. @end