Commit b081d723846c2c632ebca2d0637a2a7ffcc49de8

Authored by yanglingyu
1 parent 18b43dc4

no message

CNLiveVideoClassifyKit.podspec
@@ -28,7 +28,7 @@ TODO: Add long description of the pod here. @@ -28,7 +28,7 @@ TODO: Add long description of the pod here.
28 s.source = { :git => 'http://bj.gitlab.cnlive.com/ios-team/CNLiveVideoClassifyKit.git', :tag => s.version.to_s } 28 s.source = { :git => 'http://bj.gitlab.cnlive.com/ios-team/CNLiveVideoClassifyKit.git', :tag => s.version.to_s }
29 # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' 29 # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
30 30
31 - s.ios.deployment_target = '9.0' 31 + s.ios.deployment_target = '10.0'
32 32
33 s.source_files = 'CNLiveVideoClassifyKit/Classes/**/*' 33 s.source_files = 'CNLiveVideoClassifyKit/Classes/**/*'
34 34
@@ -45,6 +45,7 @@ TODO: Add long description of the pod here. @@ -45,6 +45,7 @@ TODO: Add long description of the pod here.
45 s.dependency 'CNLiveBaseClass' 45 s.dependency 'CNLiveBaseClass'
46 s.dependency 'CNLiveUserManagement' 46 s.dependency 'CNLiveUserManagement'
47 s.dependency 'CNLiveCommonCategory' 47 s.dependency 'CNLiveCommonCategory'
  48 + s.dependency 'CNLiveCWebViewModule'
48 s.dependency 'CNLiveTripartiteManagement/SDWebImage' 49 s.dependency 'CNLiveTripartiteManagement/SDWebImage'
49 s.dependency 'CNLiveTripartiteManagement/Masonry' 50 s.dependency 'CNLiveTripartiteManagement/Masonry'
50 s.dependency 'CNLiveTripartiteManagement/YYKit' 51 s.dependency 'CNLiveTripartiteManagement/YYKit'
CNLiveVideoClassifyKit/Classes/Controller/CNCategoryBaseViewController.m
@@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
6 // 分类控制器根类 6 // 分类控制器根类
7 7
8 #import "CNCategoryBaseViewController.h" 8 #import "CNCategoryBaseViewController.h"
9 -#import "ListViewController.h" 9 +#import "CNListViewController.h"
  10 +
10 11
11 @interface CNCategoryBaseViewController () 12 @interface CNCategoryBaseViewController ()
12 13
@@ -37,6 +38,7 @@ @@ -37,6 +38,7 @@
37 [super viewWillAppear:animated]; 38 [super viewWillAppear:animated];
38 self.navigationController.interactivePopGestureRecognizer.enabled = YES; 39 self.navigationController.interactivePopGestureRecognizer.enabled = YES;
39 self.navigationHidden = YES; 40 self.navigationHidden = YES;
  41 +
40 } 42 }
41 43
42 #pragma mark - Public 44 #pragma mark - Public
@@ -65,7 +67,7 @@ @@ -65,7 +67,7 @@
65 67
66 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index 68 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index
67 { 69 {
68 - ListViewController *list = [ListViewController new]; 70 + CNListViewController *list = [CNListViewController new];
69 return list; 71 return list;
70 } 72 }
71 73
CNLiveVideoClassifyKit/Classes/Controller/ListViewController.h renamed to CNLiveVideoClassifyKit/Classes/Controller/CNListViewController.h
1 // 1 //
2 -// ListViewController.h 2 +// CNListViewController.h
3 // CNLiveVideoClassifyKit 3 // CNLiveVideoClassifyKit
4 // 4 //
5 // Created by CNLive on 2021/8/12. 5 // Created by CNLive on 2021/8/12.
6 // 6 //
7 7
8 #import <UIKit/UIKit.h> 8 #import <UIKit/UIKit.h>
9 - 9 +#import <CNLiveBaseClass/CNLiveBaseViewController.h>
  10 +@class CNCategoryGetChannelModel;
10 11
11 NS_ASSUME_NONNULL_BEGIN 12 NS_ASSUME_NONNULL_BEGIN
12 13
13 -@interface ListViewController : UIViewController<JXCategoryListContentViewDelegate> 14 +@interface CNListViewController : CNLiveBaseViewController<JXCategoryListContentViewDelegate>
14 @property (nonatomic, copy) void (^scrollViewDidScrollBlock)(UIScrollView *); 15 @property (nonatomic, copy) void (^scrollViewDidScrollBlock)(UIScrollView *);
15 -@property (nonatomic, copy) void (^willBeginDragging)(UIScrollView *);  
16 -@property (nonatomic, copy) void (^didEndDragging)(UIScrollView *); 16 +@property (nonatomic, copy) void (^willBeginDragging)(CGFloat);
17 17
18 -- (void)stopScrolling; 18 +-(instancetype)initWithModel:(CNCategoryGetChannelModel *)model black:(BOOL)black;
19 @end 19 @end
20 20
21 NS_ASSUME_NONNULL_END 21 NS_ASSUME_NONNULL_END
CNLiveVideoClassifyKit/Classes/Controller/CNListViewController.m 0 → 100644
  1 +//
  2 +// CNListViewController.m
  3 +// CNLiveVideoClassifyKit
  4 +//
  5 +// Created by CNLive on 2021/8/12.
  6 +//
  7 +
  8 +#import "CNListViewController.h"
  9 +#import <CNLiveCWebViewModule/CNLiveCWebViewModule.h>
  10 +#import <CNLiveCWebViewModule/CNLiveSubWebViewController.h>
  11 +#import "CNCategoryGetChannelModel.h"
  12 +
  13 +@interface CNListViewController ()<UIScrollViewDelegate>
  14 +{
  15 + NSString *_thirdUrl;
  16 + NSDictionary *_paramDic;
  17 +
  18 +}
  19 +@end
  20 +
  21 +@implementation CNListViewController
  22 +-(instancetype)initWithModel:(CNCategoryGetChannelModel *)model black:(BOOL)black
  23 +{
  24 + self = [super init];
  25 + if (self) {
  26 + _thirdUrl = model.thirdUrl;
  27 + _paramDic = @{
  28 + @"title": model.showName,
  29 + @"intercept": @(YES),
  30 + @"isBlack":@(black)
  31 +
  32 + };
  33 + }
  34 + return self;
  35 +}
  36 +- (void)viewDidLoad {
  37 + [super viewDidLoad];
  38 + self.view.backgroundColor = [UIColor whiteColor];
  39 + self.navigationHidden = YES;
  40 +}
  41 +
  42 +-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
  43 +{
  44 + if ([keyPath isEqualToString:@"contentOffset"]) {
  45 + CGPoint oldPoint = [change[NSKeyValueChangeOldKey] CGPointValue];
  46 + !self.willBeginDragging ?:self.willBeginDragging(oldPoint.y);
  47 + UIScrollView *scrollView = (UIScrollView *)object;
  48 + !self.scrollViewDidScrollBlock ?: self.scrollViewDidScrollBlock(scrollView);
  49 +
  50 + }
  51 +}
  52 +#pragma mark - JXCategoryListContentViewDelegate
  53 +
  54 +/**
  55 + 实现 <JXCategoryListContentViewDelegate> 协议方法,返回该视图控制器所拥有的「视图」
  56 + */
  57 +- (UIView *)listView {
  58 + CNLiveSubWebViewController *subVC = [CNLiveCWebViewModule showWebVCWithLunchForWebURL:_thirdUrl
  59 + ParamDict:_paramDic ShowType:CNLiveWebViewLunchShowTypeHidden];
  60 + for (UIView*subView in subVC.view.subviews) {
  61 + if ([subView isKindOfClass:[WKWebView class]]) {
  62 + WKWebView *webView = (WKWebView *)subView;
  63 + [webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionOld context:NULL];
  64 + }
  65 + }
  66 +
  67 + return subVC.view;
  68 +}
  69 +/*
  70 +#pragma mark - Navigation
  71 +
  72 +// In a storyboard-based application, you will often want to do a little preparation before navigation
  73 +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  74 + // Get the new view controller using [segue destinationViewController].
  75 + // Pass the selected object to the new view controller.
  76 +}
  77 +*/
  78 +
  79 +@end
CNLiveVideoClassifyKit/Classes/Controller/CNLiveClassifySegmentController.m
@@ -9,8 +9,9 @@ @@ -9,8 +9,9 @@
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 #import "CNCustomChannelListView.h" 10 #import "CNCustomChannelListView.h"
11 #import "CNCategoryGetChannelModel.h" 11 #import "CNCategoryGetChannelModel.h"
12 -#import "ListViewController.h" 12 +#import "CNListViewController.h"
13 #import "CNLiveSubSegmentController.h" 13 #import "CNLiveSubSegmentController.h"
  14 +#import <CNLiveCWebViewModule/CNLiveWebViewJumpBridge.h>
14 15
15 @interface CNLiveClassifySegmentController ()<JXCategoryViewDelegate> 16 @interface CNLiveClassifySegmentController ()<JXCategoryViewDelegate>
16 17
@@ -43,7 +44,14 @@ static CGFloat moveHeight = 50; @@ -43,7 +44,14 @@ static CGFloat moveHeight = 50;
43 - (void)viewDidLoad { 44 - (void)viewDidLoad {
44 [super viewDidLoad]; 45 [super viewDidLoad];
45 self.topBgImgHeight = kStatusHeight+100; 46 self.topBgImgHeight = kStatusHeight+100;
46 - [self.view insertSubview:self.topBgImg atIndex:0]; 47 + [self.view addSubview:self.topBgImg];
  48 + [self.view sendSubviewToBack:self.topBgImg];
  49 + if ([CNUserShareManager isLogin]) {
  50 + [self.myCategoryView addSubview:self.customChannelsBtn];
  51 + }else
  52 + {
  53 + [self.myCategoryView addSubview:self.loginBtn];
  54 + }
47 55
48 for (int i = 0;i<self.imageNames.count;i++) { 56 for (int i = 0;i<self.imageNames.count;i++) {
49 NSURL *url = [NSURL URLWithString:self.imageNames[i]]; 57 NSURL *url = [NSURL URLWithString:self.imageNames[i]];
@@ -68,59 +76,86 @@ static CGFloat moveHeight = 50; @@ -68,59 +76,86 @@ static CGFloat moveHeight = 50;
68 self.myCategoryView.cellWidthZoomEnabled = YES; 76 self.myCategoryView.cellWidthZoomEnabled = YES;
69 self.myCategoryView.cellWidthZoomScale = 1.3; 77 self.myCategoryView.cellWidthZoomScale = 1.3;
70 self.myCategoryView.imageSize = CGSizeMake(56, 18); 78 self.myCategoryView.imageSize = CGSizeMake(56, 18);
71 - [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:0]; 79 + [self updateSelectColors:0];
  80 + [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:0 unselectIndex:0];
72 81
73 self.listContainerView.translatesAutoresizingMaskIntoConstraints = NO; 82 self.listContainerView.translatesAutoresizingMaskIntoConstraints = NO;
74 -// //增加上下滑动手势  
75 -// UISwipeGestureRecognizer *recognizerUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];  
76 -// [recognizerUp setDirection:UISwipeGestureRecognizerDirectionUp];  
77 -// [self.listContainerView addGestureRecognizer:recognizerUp];  
78 -//  
79 -// UISwipeGestureRecognizer *recognizerDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];  
80 -// [recognizerDown setDirection:UISwipeGestureRecognizerDirectionDown];  
81 -// [self.listContainerView addGestureRecognizer:recognizerDown];  
82 // Do any additional setup after loading the view. 83 // Do any additional setup after loading the view.
83 } 84 }
84 85
85 -(void)viewDidLayoutSubviews 86 -(void)viewDidLayoutSubviews
86 { 87 {
87 [super viewDidLayoutSubviews]; 88 [super viewDidLayoutSubviews];
88 - [self.myCategoryView.heightAnchor constraintEqualToConstant:[self preferredCategoryViewHeight]].active = YES;  
89 - [self.myCategoryView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor].active = YES;  
90 - [self.myCategoryView.topAnchor constraintEqualToAnchor:self.myCategoryView.topAnchor].active = YES;  
91 - [self.myCategoryView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor].active = YES;  
92 - [self.myCategoryView.bottomAnchor constraintEqualToAnchor:self.listContainerView.topAnchor].active = YES;  
93 - [self.listContainerView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor].active = YES;  
94 - [self.listContainerView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor].active = YES;  
95 - CGFloat listContainerViewHeight = self.view.bounds.size.height;  
96 - [self.listContainerView.heightAnchor constraintEqualToConstant:listContainerViewHeight].active = YES; 89 + self.listContainerView.frame = CGRectMake(0,self.myCategoryView.bottom, kScreenWidth, self.view.height -kStatusHeight);
  90 + if ([CNUserShareManager isLogin]) {
  91 + self.myCategoryView.width = kScreenWidth - 45;
  92 + self.customChannelsBtn.centerY = self.myCategoryView.height/2;
  93 + self.customChannelsBtn.right = kScreenWidth - 18;
  94 + }else
  95 + {
  96 + self.myCategoryView.width = kScreenWidth - 70;
  97 + self.loginBtn.centerY = self.myCategoryView.height/2;
  98 + self.loginBtn.right = kScreenWidth - 11;
  99 + }
97 100
98 } 101 }
99 102
100 -(void)viewDidAppear:(BOOL)animated 103 -(void)viewDidAppear:(BOOL)animated
101 { 104 {
102 [super viewDidAppear:animated]; 105 [super viewDidAppear:animated];
  106 +
103 } 107 }
104 108
  109 +-(void)viewDidDisappear:(BOOL)animated
  110 +{
  111 + [super viewDidDisappear: animated];
  112 +
  113 +}
  114 +
  115 +
105 -(UIStatusBarStyle)preferredStatusBarStyle 116 -(UIStatusBarStyle)preferredStatusBarStyle
106 { 117 {
107 if (self.currentAtatusColor.intValue == 0) { 118 if (self.currentAtatusColor.intValue == 0) {
  119 + self.customChannelsBtn.selected = YES;
108 return UIStatusBarStyleLightContent; 120 return UIStatusBarStyleLightContent;
109 }else 121 }else
110 { 122 {
  123 + self.customChannelsBtn.selected = NO;
111 return UIStatusBarStyleDefault; 124 return UIStatusBarStyleDefault;
112 } 125 }
113 126
114 } 127 }
115 -#pragma mark - Method  
116 128
  129 +#pragma mark - Action
  130 +// 点击定制频道按钮进入定制
  131 +- (void)customAction:(UIButton *)sender {
  132 +
  133 +}
  134 +// 登录
  135 +- (void)loginAction:(UIButton *)sender {
  136 +
  137 +}
  138 +#pragma mark - Method
  139 +-(void)updateSelectColors:(NSInteger)index
  140 +{
  141 + NSString *backgroundImage = [self.bgImages safetyObjectAtIndex:index];
  142 + [self.topBgImg sd_setImageWithURL:[NSURL URLWithString:backgroundImage]];
  143 + NSString *backgroundColor = [self.bgColors safetyObjectAtIndex:index];
  144 + self.topBgImg.backgroundColor = CNLiveColorWithHexString(backgroundColor);
  145 + self.myCategoryView.titleColor = self.textColors[index];
  146 + self.myCategoryView.titleSelectedColor = self.textColorSeleteds[index];
  147 + if (!self.currentAtatusColor || ![self.currentAtatusColor isEqualToString:self.statusBarColors[index]] ) {
  148 + self.currentAtatusColor = self.statusBarColors[index];
  149 + [self setNeedsStatusBarAppearanceUpdate];
  150 + }
  151 +}
117 //配置选中状态显示图片,未选中展示文字 152 //配置选中状态显示图片,未选中展示文字
118 -- (void)configCategoryViewWithType:(JXCategoryTitleImageType)imageType selectIndex:(NSInteger)index 153 +- (void)configCategoryViewWithType:(JXCategoryTitleImageType)imageType selectIndex:(NSInteger)index unselectIndex:(NSInteger)unIndex
119 { 154 {
120 155
121 NSMutableArray *types = [NSMutableArray array]; 156 NSMutableArray *types = [NSMutableArray array];
122 for (int i = 0; i < self.titles.count; i ++) { 157 for (int i = 0; i < self.titles.count; i ++) {
123 - if (i == index) { 158 + if (i == index || i == unIndex) {
124 NSURL *url = self.imageNames[i]; 159 NSURL *url = self.imageNames[i];
125 NSString *str = [url absoluteString]; 160 NSString *str = [url absoluteString];
126 if ([str isEqual:@""]) { 161 if ([str isEqual:@""]) {
@@ -132,17 +167,7 @@ static CGFloat moveHeight = 50; @@ -132,17 +167,7 @@ static CGFloat moveHeight = 50;
132 [types addObject:@(JXCategoryTitleImageType_OnlyTitle)]; 167 [types addObject:@(JXCategoryTitleImageType_OnlyTitle)];
133 } 168 }
134 } 169 }
135 - NSString *backgroundImage = [self.bgImages safetyObjectAtIndex:index];  
136 - [self.topBgImg sd_setImageWithURL:[NSURL URLWithString:backgroundImage]];  
137 - NSString *backgroundColor = [self.bgColors safetyObjectAtIndex:index];  
138 - self.topBgImg.backgroundColor = CNLiveColorWithHexString(backgroundColor);  
139 - self.myCategoryView.titleColor = self.textColors[index];  
140 - self.myCategoryView.titleSelectedColor = self.textColorSeleteds[index];  
141 self.myCategoryView.imageTypes = types; 170 self.myCategoryView.imageTypes = types;
142 - if (!self.currentAtatusColor || ![self.currentAtatusColor isEqualToString:self.statusBarColors[index]] ) {  
143 - self.currentAtatusColor = self.statusBarColors[index];  
144 - [self setNeedsStatusBarAppearanceUpdate];  
145 - }  
146 for (int i = 0; i < self.titles.count; i ++) { 171 for (int i = 0; i < self.titles.count; i ++) {
147 [self.myCategoryView reloadCellAtIndex:i]; 172 [self.myCategoryView reloadCellAtIndex:i];
148 } 173 }
@@ -201,30 +226,47 @@ static CGFloat moveHeight = 50; @@ -201,30 +226,47 @@ static CGFloat moveHeight = 50;
201 } 226 }
202 } 227 }
203 - (void)listScrollViewDidScroll:(UIScrollView *)scrollView { 228 - (void)listScrollViewDidScroll:(UIScrollView *)scrollView {
204 - CGPoint point = CGPointZero;  
205 - CGFloat offsetY = 0;  
206 - if (scrollView.contentOffset.y <= 0 && self.myCategoryView.frame.origin.y != kStatusHeight) {  
207 - point = [scrollView.panGestureRecognizer translationInView:scrollView];  
208 - offsetY = point.y - self.lastOffsetY;  
209 - }else {  
210 - if ((scrollView.contentOffset.y < 0 && self.myCategoryView.frame.origin.y == kStatusHeight) || scrollView.contentOffset.y + scrollView.bounds.size.height >= scrollView.contentSize.height) {  
211 - return; 229 + CGPoint point = scrollView.contentOffset;
  230 + CGFloat offsetY = point.y - self.lastOffsetY;
  231 +
  232 + [self scrollViewUpDowm:offsetY>0?YES:NO];
  233 +}
  234 +-(void)scrollViewUpDowm:(BOOL)isUp
  235 +{
  236 + [UIView animateWithDuration:0.3 animations:^{
  237 + if (isUp) {
  238 + [self scrollViewUp];
  239 + }else
  240 + {
  241 + [self scrollViewDown];
212 } 242 }
213 - point = scrollView.contentOffset;  
214 - offsetY = -(point.y - self.lastOffsetY);  
215 - } 243 + if ([CNUserShareManager isLogin]) {
  244 + self.customChannelsBtn.centerY = self.myCategoryView.collectionView.centerY;
  245 + }else
  246 + {
  247 + self.loginBtn.centerY = self.myCategoryView.collectionView.centerY;
  248 + }
  249 + }];
  250 +}
216 251
217 - if (self.lastOffsetY == 0) {  
218 - self.lastOffsetY = point.y; 252 +-(void)scrollViewUp{
  253 + if (self.topBgImg.top<0) {
219 return; 254 return;
220 } 255 }
221 - CGRect naviBarFrame = self.myCategoryView.frame;  
222 - naviBarFrame.origin.y += offsetY;  
223 - naviBarFrame.origin.y = MAX(-[self preferredCategoryViewHeight], MIN(kStatusHeight, naviBarFrame.origin.y));  
224 - self.myCategoryView.frame = naviBarFrame;  
225 - double percent = (naviBarFrame.origin.y + [self preferredCategoryViewHeight])/[self preferredCategoryViewHeight];  
226 - self.myCategoryView.alpha = percent;  
227 - self.lastOffsetY = point.y; 256 + [self managerScrollView:YES];
  257 + self.topBgImg.top -= moveHeight;
  258 + self.myCategoryView.collectionView.top = -50-kStatusHeight;
  259 + self.listContainerView.top = kStatusHeight;
  260 +}
  261 +-(void)scrollViewDown{
  262 + if (self.topBgImg.top==0) {
  263 + return;
  264 + }
  265 + [self managerScrollView:NO];
  266 + self.topBgImg.top += moveHeight;
  267 + self.myCategoryView.collectionView.top = 0;
  268 + self.listContainerView.top = self.myCategoryView.bottom;
  269 +
228 } 270 }
229 271
230 -(void)managerScrollView:(BOOL)enabled 272 -(void)managerScrollView:(BOOL)enabled
@@ -243,21 +285,34 @@ static CGFloat moveHeight = 50; @@ -243,21 +285,34 @@ static CGFloat moveHeight = 50;
243 } 285 }
244 } 286 }
245 #pragma mark - JXCategoryViewDelegate 287 #pragma mark - JXCategoryViewDelegate
  288 +// 正在滚动中的回调,这里调整背景图片的 alpha 透明度
  289 +- (void)categoryView:(JXCategoryBaseView *)categoryView scrollingFromLeftIndex:(NSInteger)leftIndex toRightIndex:(NSInteger)rightIndex ratio:(CGFloat)ratio {
  290 + [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:leftIndex unselectIndex:rightIndex];
  291 +}
  292 +
246 293
247 - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index { 294 - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
248 NSLog(@"%@", NSStringFromSelector(_cmd)); 295 NSLog(@"%@", NSStringFromSelector(_cmd));
249 self.currentIndex = index; 296 self.currentIndex = index;
250 // 侧滑手势处理 297 // 侧滑手势处理
251 self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0); 298 self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
252 - [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:index]; 299 + [self updateSelectColors:index];
  300 + [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:index unselectIndex:index];
253 } 301 }
254 #pragma mark - JXCategoryListContainerViewDelegate 302 #pragma mark - JXCategoryListContainerViewDelegate
255 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index 303 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index
256 { 304 {
257 CNCategoryGetChannelModel *model = self.dataArray[index]; 305 CNCategoryGetChannelModel *model = self.dataArray[index];
  306 + BOOL isBlack = NO;
  307 + if (CNLiveStringIsEmpty(model.statusBarColor)) {
  308 + isBlack = YES;
  309 + } else {
  310 + isBlack = [model.statusBarColor boolValue];//1 黑色
  311 + }
258 if (model.pageStyleList.count>0) { 312 if (model.pageStyleList.count>0) {
259 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight); 313 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight);
260 CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model]; 314 CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model];
  315 + subVC.isBlack = isBlack;
261 weakself 316 weakself
262 subVC.scrollViewDidScrollBlock = ^(UIScrollView * _Nonnull scrollView) { 317 subVC.scrollViewDidScrollBlock = ^(UIScrollView * _Nonnull scrollView) {
263 [weakSelf listScrollViewDidScroll:scrollView]; 318 [weakSelf listScrollViewDidScroll:scrollView];
@@ -265,13 +320,17 @@ static CGFloat moveHeight = 50; @@ -265,13 +320,17 @@ static CGFloat moveHeight = 50;
265 subVC.willBeginDragging = ^(CGFloat lastOffsetY) { 320 subVC.willBeginDragging = ^(CGFloat lastOffsetY) {
266 weakSelf.lastOffsetY = lastOffsetY; 321 weakSelf.lastOffsetY = lastOffsetY;
267 }; 322 };
268 - subVC.didEndDragging = ^(CGFloat lastOffsetY) {  
269 - weakSelf.lastOffsetY = lastOffsetY;  
270 - };  
271 return subVC; 323 return subVC;
272 } 324 }
273 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight - 50); 325 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight - 50);
274 - ListViewController *list = [ListViewController new]; 326 + CNListViewController *list = [[CNListViewController alloc] initWithModel:model black:isBlack];
  327 + weakself
  328 + list.scrollViewDidScrollBlock = ^(UIScrollView * _Nonnull scrollView) {
  329 + [weakSelf listScrollViewDidScroll:scrollView];
  330 + };
  331 + list.willBeginDragging = ^(CGFloat lastOffsetY) {
  332 + weakSelf.lastOffsetY = lastOffsetY;
  333 + };
275 return list; 334 return list;
276 } 335 }
277 #pragma mark - Public 336 #pragma mark - Public
CNLiveVideoClassifyKit/Classes/Controller/CNLiveSubSegmentController.h
@@ -11,10 +11,12 @@ @@ -11,10 +11,12 @@
11 NS_ASSUME_NONNULL_BEGIN 11 NS_ASSUME_NONNULL_BEGIN
12 12
13 @interface CNLiveSubSegmentController : CNCategoryBaseViewController<JXCategoryListContentViewDelegate> 13 @interface CNLiveSubSegmentController : CNCategoryBaseViewController<JXCategoryListContentViewDelegate>
  14 +
  15 +@property (nonatomic, assign) BOOL isBlack;
  16 +
14 -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model; 17 -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model;
15 @property (nonatomic, copy) void (^scrollViewDidScrollBlock)(UIScrollView *); 18 @property (nonatomic, copy) void (^scrollViewDidScrollBlock)(UIScrollView *);
16 @property (nonatomic, copy) void (^willBeginDragging)(CGFloat ); 19 @property (nonatomic, copy) void (^willBeginDragging)(CGFloat );
17 -@property (nonatomic, copy) void (^didEndDragging)(CGFloat );  
18 20
19 //- (void)stopScrolling; 21 //- (void)stopScrolling;
20 22
CNLiveVideoClassifyKit/Classes/Controller/CNLiveSubSegmentController.m
@@ -7,11 +7,11 @@ @@ -7,11 +7,11 @@
7 7
8 #import "CNLiveSubSegmentController.h" 8 #import "CNLiveSubSegmentController.h"
9 #import "CNCategoryGetChannelModel.h" 9 #import "CNCategoryGetChannelModel.h"
10 -#import "ListViewController.h" 10 +#import "CNListViewController.h"
11 11
12 @interface CNLiveSubSegmentController () 12 @interface CNLiveSubSegmentController ()
13 @property (nonatomic, strong)JXCategoryTitleView *myCategoryView; 13 @property (nonatomic, strong)JXCategoryTitleView *myCategoryView;
14 -@property (nonatomic, strong)NSArray *pageListArr; 14 +@property (nonatomic, strong)NSArray<CNCategoryGetChannelModel*> *pageListArr;
15 @property (nonatomic, strong)UIColor *textColor; 15 @property (nonatomic, strong)UIColor *textColor;
16 @property (nonatomic, strong)UIColor *backgroundColor; 16 @property (nonatomic, strong)UIColor *backgroundColor;
17 @property (nonatomic, strong)NSString *backImage; 17 @property (nonatomic, strong)NSString *backImage;
@@ -93,16 +93,14 @@ @@ -93,16 +93,14 @@
93 93
94 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index 94 -(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index
95 { 95 {
96 - ListViewController *list = [ListViewController new]; 96 + CNCategoryGetChannelModel *model = self.pageListArr[index];
  97 + CNListViewController *list = [[CNListViewController alloc] initWithModel:model black:self.isBlack];
97 weakself 98 weakself
98 list.scrollViewDidScrollBlock = ^(UIScrollView * _Nonnull scrollView) { 99 list.scrollViewDidScrollBlock = ^(UIScrollView * _Nonnull scrollView) {
99 - weakSelf.scrollViewDidScrollBlock(scrollView); 100 + !weakSelf.scrollViewDidScrollBlock ?: weakSelf.scrollViewDidScrollBlock(scrollView);
100 }; 101 };
101 - list.willBeginDragging = ^(UIScrollView * _Nonnull scrollView) {  
102 - weakSelf.willBeginDragging(0);  
103 - };  
104 - list.didEndDragging = ^(UIScrollView * _Nonnull scrollView) {  
105 - weakSelf.didEndDragging(0); 102 + list.willBeginDragging = ^(CGFloat lastOffsetY) {
  103 + !weakSelf.willBeginDragging ?: weakSelf.willBeginDragging(lastOffsetY);
106 }; 104 };
107 return list; 105 return list;
108 } 106 }
CNLiveVideoClassifyKit/Classes/Controller/ListViewController.m deleted 100644 → 0
1 -//  
2 -// ListViewController.m  
3 -// CNLiveVideoClassifyKit  
4 -//  
5 -// Created by CNLive on 2021/8/12.  
6 -//  
7 -  
8 -#import "ListViewController.h"  
9 -  
10 -@interface ListViewController ()<UITableViewDataSource, UITableViewDelegate>  
11 -@property (nonatomic, strong) UITableView *tableView;  
12 -@end  
13 -  
14 -@implementation ListViewController  
15 -  
16 -- (void)viewDidLoad {  
17 - [super viewDidLoad];  
18 - self.view.backgroundColor = [UIColor whiteColor];  
19 - self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];  
20 - if (@available(iOS 11.0, *)) {  
21 - if ([self.tableView respondsToSelector:@selector(setContentInsetAdjustmentBehavior:)]) {  
22 - self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;  
23 - }  
24 - }  
25 - self.tableView.dataSource = self;  
26 - self.tableView.delegate = self;  
27 - [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];  
28 - [self.view addSubview:self.tableView];  
29 - // Do any additional setup after loading the view.  
30 -}  
31 -- (void)viewDidLayoutSubviews {  
32 - [super viewDidLayoutSubviews];  
33 -  
34 - self.tableView.frame = self.view.bounds;  
35 -}  
36 -- (void)stopScrolling {  
37 - [self.tableView setContentOffset:self.tableView.contentOffset animated:NO];  
38 -}  
39 -- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {  
40 - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];  
41 - cell.textLabel.text = [NSString stringWithFormat:@"row:%ld", indexPath.row];  
42 - return cell;  
43 -}  
44 -  
45 -- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  
46 - return 100;  
47 -}  
48 -  
49 -- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
50 - !self.scrollViewDidScrollBlock ?: self.scrollViewDidScrollBlock(scrollView);  
51 -}  
52 -  
53 -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {  
54 - !self.willBeginDragging ?: self.willBeginDragging(scrollView);  
55 -}  
56 -  
57 -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {  
58 - !self.didEndDragging ?: self.didEndDragging(scrollView);  
59 -}  
60 -#pragma mark - JXCategoryListContentViewDelegate  
61 -  
62 -/**  
63 - 实现 <JXCategoryListContentViewDelegate> 协议方法,返回该视图控制器所拥有的「视图」  
64 - */  
65 -- (UIView *)listView {  
66 - return self.view;  
67 -}  
68 -/*  
69 -#pragma mark - Navigation  
70 -  
71 -// In a storyboard-based application, you will often want to do a little preparation before navigation  
72 -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
73 - // Get the new view controller using [segue destinationViewController].  
74 - // Pass the selected object to the new view controller.  
75 -}  
76 -*/  
77 -  
78 -@end  
Example/CNLiveVideoClassifyKit.xcodeproj/project.pbxproj
@@ -358,16 +358,21 @@ @@ -358,16 +358,21 @@
358 "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", 358 "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework",
359 "${BUILT_PRODUCTS_DIR}/CNLiveBaseClass/CNLiveBaseClass.framework", 359 "${BUILT_PRODUCTS_DIR}/CNLiveBaseClass/CNLiveBaseClass.framework",
360 "${BUILT_PRODUCTS_DIR}/CNLiveBaseKit/CNLiveBaseKit.framework", 360 "${BUILT_PRODUCTS_DIR}/CNLiveBaseKit/CNLiveBaseKit.framework",
  361 + "${BUILT_PRODUCTS_DIR}/CNLiveBusinessTools/CNLiveBusinessTools.framework",
  362 + "${BUILT_PRODUCTS_DIR}/CNLiveCWebViewModule/CNLiveCWebViewModule.framework",
361 "${BUILT_PRODUCTS_DIR}/CNLiveCategory/CNLiveCategory.framework", 363 "${BUILT_PRODUCTS_DIR}/CNLiveCategory/CNLiveCategory.framework",
362 "${BUILT_PRODUCTS_DIR}/CNLiveCommonCategory/CNLiveCommonCategory.framework", 364 "${BUILT_PRODUCTS_DIR}/CNLiveCommonCategory/CNLiveCommonCategory.framework",
363 "${BUILT_PRODUCTS_DIR}/CNLiveCustomControl/CNLiveCustomControl.framework", 365 "${BUILT_PRODUCTS_DIR}/CNLiveCustomControl/CNLiveCustomControl.framework",
  366 + "${BUILT_PRODUCTS_DIR}/CNLiveCustomUI/CNLiveCustomUI.framework",
364 "${BUILT_PRODUCTS_DIR}/CNLiveEnvironment/CNLiveEnvironment.framework", 367 "${BUILT_PRODUCTS_DIR}/CNLiveEnvironment/CNLiveEnvironment.framework",
365 "${BUILT_PRODUCTS_DIR}/CNLiveRequestBastKit/CNLiveRequestBastKit.framework", 368 "${BUILT_PRODUCTS_DIR}/CNLiveRequestBastKit/CNLiveRequestBastKit.framework",
366 "${BUILT_PRODUCTS_DIR}/CNLiveTripartiteManagement/CNLiveTripartiteManagement.framework", 369 "${BUILT_PRODUCTS_DIR}/CNLiveTripartiteManagement/CNLiveTripartiteManagement.framework",
367 "${BUILT_PRODUCTS_DIR}/CNLiveUserManagement/CNLiveUserManagement.framework", 370 "${BUILT_PRODUCTS_DIR}/CNLiveUserManagement/CNLiveUserManagement.framework",
368 "${BUILT_PRODUCTS_DIR}/CNLiveVideoClassifyKit/CNLiveVideoClassifyKit.framework", 371 "${BUILT_PRODUCTS_DIR}/CNLiveVideoClassifyKit/CNLiveVideoClassifyKit.framework",
  372 + "${BUILT_PRODUCTS_DIR}/FWDebug/FWDebug.framework",
369 "${BUILT_PRODUCTS_DIR}/JXCategoryView/JXCategoryView.framework", 373 "${BUILT_PRODUCTS_DIR}/JXCategoryView/JXCategoryView.framework",
370 "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework", 374 "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework",
  375 + "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework",
371 "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework", 376 "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework",
372 "${BUILT_PRODUCTS_DIR}/QMUIKit/QMUIKit.framework", 377 "${BUILT_PRODUCTS_DIR}/QMUIKit/QMUIKit.framework",
373 "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", 378 "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
@@ -379,16 +384,21 @@ @@ -379,16 +384,21 @@
379 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", 384 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework",
380 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBaseClass.framework", 385 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBaseClass.framework",
381 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBaseKit.framework", 386 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBaseKit.framework",
  387 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveBusinessTools.framework",
  388 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCWebViewModule.framework",
382 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCategory.framework", 389 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCategory.framework",
383 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCommonCategory.framework", 390 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCommonCategory.framework",
384 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomControl.framework", 391 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomControl.framework",
  392 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomUI.framework",
385 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveEnvironment.framework", 393 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveEnvironment.framework",
386 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveRequestBastKit.framework", 394 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveRequestBastKit.framework",
387 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveTripartiteManagement.framework", 395 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveTripartiteManagement.framework",
388 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveUserManagement.framework", 396 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveUserManagement.framework",
389 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveVideoClassifyKit.framework", 397 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveVideoClassifyKit.framework",
  398 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FWDebug.framework",
390 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JXCategoryView.framework", 399 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JXCategoryView.framework",
391 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework", 400 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework",
  401 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework",
392 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework", 402 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework",
393 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QMUIKit.framework", 403 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/QMUIKit.framework",
394 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", 404 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
Example/Podfile
1 use_frameworks! 1 use_frameworks!
2 2
3 -platform :ios, '9.0' 3 +platform :ios, '10.0'
4 source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' 4 source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
5 source 'http://bj.gitlab.cnlive.com/ios-team/CNLiveRepos.git' 5 source 'http://bj.gitlab.cnlive.com/ios-team/CNLiveRepos.git'
6 #source 'http://bj.gitlab.cnlive.com/DSIOSTeam/DSSpecRepos.git' 6 #source 'http://bj.gitlab.cnlive.com/DSIOSTeam/DSSpecRepos.git'
@@ -8,6 +8,8 @@ target &#39;CNLiveVideoClassifyKit_Example&#39; do @@ -8,6 +8,8 @@ target &#39;CNLiveVideoClassifyKit_Example&#39; do
8 pod 'CNLiveVideoClassifyKit', :path => '../' 8 pod 'CNLiveVideoClassifyKit', :path => '../'
9 pod 'CNLiveEnvironment' 9 pod 'CNLiveEnvironment'
10 pod 'CNLiveRequestBastKit' 10 pod 'CNLiveRequestBastKit'
  11 + pod 'CNLiveCWebViewModule'
  12 + pod 'FWDebug', :configurations => ['Debug']
11 #依赖三方私有库,如果里面有.a的时候加上这个 13 #依赖三方私有库,如果里面有.a的时候加上这个
12 pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {} 14 pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
13 ############################################ #删除WebViewJavascriptBridge中的WebViewJavascriptBridge.h和WebViewJavascriptBridge.m文件 15 ############################################ #删除WebViewJavascriptBridge中的WebViewJavascriptBridge.h和WebViewJavascriptBridge.m文件