Commit fdb67b04a2707f952929cb536c0ea26f56d98bf8

Authored by yanglingyu
1 parent 079680ca

提取分类遗留管理类

CNLiveVideoClassifyKit.podspec
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 8
9 Pod::Spec.new do |s| 9 Pod::Spec.new do |s|
10 s.name = 'CNLiveVideoClassifyKit' 10 s.name = 'CNLiveVideoClassifyKit'
11 - s.version = '0.0.30' 11 + s.version = '0.0.31'
12 s.summary = '视讯头部一二级菜单组件' 12 s.summary = '视讯头部一二级菜单组件'
13 13
14 # This description is used to generate tags and improve search results. 14 # This description is used to generate tags and improve search results.
@@ -42,12 +42,14 @@ Pod::Spec.new do |s| @@ -42,12 +42,14 @@ Pod::Spec.new do |s|
42 s.frameworks = 'UIKit', 'MapKit' 42 s.frameworks = 'UIKit', 'MapKit'
43 s.dependency 'JXCategoryView' 43 s.dependency 'JXCategoryView'
44 s.dependency 'CNLiveNewTripartiteManagement/MJExtension' 44 s.dependency 'CNLiveNewTripartiteManagement/MJExtension'
  45 + s.dependency 'CNLiveNewTripartiteManagement/MJRefresh'
45 s.dependency 'CNLiveBaseKit' 46 s.dependency 'CNLiveBaseKit'
46 s.dependency 'CNLiveCategory' 47 s.dependency 'CNLiveCategory'
47 s.dependency 'CNLiveUserManagement' 48 s.dependency 'CNLiveUserManagement'
48 s.dependency 'CNLiveCommonCategory' 49 s.dependency 'CNLiveCommonCategory'
49 s.dependency 'CNLiveBeeHive' 50 s.dependency 'CNLiveBeeHive'
50 s.dependency 'CNLiveEnvironment' 51 s.dependency 'CNLiveEnvironment'
  52 + s.dependency 'CNLiveCustomControl'
51 s.dependency 'UMCCommon' 53 s.dependency 'UMCCommon'
52 s.dependency 'CNLiveNewTripartiteManagement/SDWebImage' 54 s.dependency 'CNLiveNewTripartiteManagement/SDWebImage'
53 s.dependency 'CNLiveNewTripartiteManagement/Masonry' 55 s.dependency 'CNLiveNewTripartiteManagement/Masonry'
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/backWhite@2x.png 0 → 100644

2.03 KB

CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/backWhite@3x.png 0 → 100644

2.28 KB

CNLiveVideoClassifyKit/Classes/ClassifyCategory/Controller/CNCategoryBaseViewController.m
@@ -30,12 +30,6 @@ @@ -30,12 +30,6 @@
30 self.categoryView.frame = CGRectMake(0, kStatusHeight, self.view.bounds.size.width, [self preferredCategoryViewHeight]); 30 self.categoryView.frame = CGRectMake(0, kStatusHeight, self.view.bounds.size.width, [self preferredCategoryViewHeight]);
31 self.listContainerView.frame = CGRectMake(0, [self preferredCategoryViewHeight], self.view.bounds.size.width, self.view.bounds.size.height); 31 self.listContainerView.frame = CGRectMake(0, [self preferredCategoryViewHeight], self.view.bounds.size.width, self.view.bounds.size.height);
32 } 32 }
33 --(void)viewWillAppear:(BOOL)animated  
34 -{  
35 - [super viewWillAppear:animated];  
36 - self.navigationController.navigationBarHidden = YES;  
37 -  
38 -}  
39 33
40 #pragma mark - Public 34 #pragma mark - Public
41 - (void)categoryViewSelectedItemAtIndex:(NSInteger)index 35 - (void)categoryViewSelectedItemAtIndex:(NSInteger)index
CNLiveVideoClassifyKit/Classes/ClassifyCategory/Controller/CNLiveClassifySegmentController.m
@@ -174,7 +174,7 @@ static const CGFloat animationHeight = 15; @@ -174,7 +174,7 @@ static const CGFloat animationHeight = 15;
174 [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveDeepLinkPushNotification object:nil]; 174 [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveDeepLinkPushNotification object:nil];
175 [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveRemotePushNotification object:nil]; 175 [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveRemotePushNotification object:nil];
176 } 176 }
177 - self.navigationController.navigationBar.hidden = YES; 177 + self.navigationController.navigationBarHidden = YES;
178 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:CNLiveLaunchWithFirsh]; 178 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:CNLiveLaunchWithFirsh];
179 [[NSUserDefaults standardUserDefaults] synchronize]; 179 [[NSUserDefaults standardUserDefaults] synchronize];
180 self.tabBarController.tabBar.hidden = NO; 180 self.tabBarController.tabBar.hidden = NO;
@@ -756,13 +756,17 @@ static const CGFloat animationHeight = 15; @@ -756,13 +756,17 @@ static const CGFloat animationHeight = 15;
756 NSDictionary *dic = CNLiveStringJsonToDictionary(dataStr); 756 NSDictionary *dic = CNLiveStringJsonToDictionary(dataStr);
757 CNCategoryGetChannelModel *model = [CNCategoryGetChannelModel mj_objectWithKeyValues:dic]; 757 CNCategoryGetChannelModel *model = [CNCategoryGetChannelModel mj_objectWithKeyValues:dic];
758 NSDictionary *paramDic = nil; 758 NSDictionary *paramDic = nil;
  759 + BOOL isBlack = NO;
  760 + if (CNLiveStringIsEmpty(model.statusBarColor)) {
  761 + isBlack = YES;
  762 + } else {
  763 + isBlack = [model.statusBarColor boolValue];//1 黑色
  764 + }
759 if (model.pageStyleList.count>0) { 765 if (model.pageStyleList.count>0) {
760 - paramDic = @{  
761 - @"showName":model.showName?model.showName:@"",  
762 - @"backgroundColor":model.backgroundColor?model.backgroundColor:@"",  
763 - @"index":@(index)  
764 - };  
765 - [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushOtherSegmentVC pageType:model.pageType.integerValue param:paramDic]; 766 + CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model];
  767 + subVC.showType = CNLiveSubVCShowtypeChannel;
  768 + subVC.isBlack = isBlack;
  769 + [self.navigationController pushViewController:subVC animated:YES];
766 770
767 }else{ 771 }else{
768 if([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){ 772 if([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){
@@ -828,6 +832,7 @@ static const CGFloat animationHeight = 15; @@ -828,6 +832,7 @@ static const CGFloat animationHeight = 15;
828 if (model.pageStyleList.count>0) { 832 if (model.pageStyleList.count>0) {
829 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight); 833 self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight);
830 CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model]; 834 CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model];
  835 + subVC.showType = CNLiveSubVCShowtypeClassify;
831 subVC.isBlack = isBlack; 836 subVC.isBlack = isBlack;
832 subVC.delegate = self; 837 subVC.delegate = self;
833 if (index == self.isLoginIndex) { 838 if (index == self.isLoginIndex) {
@@ -856,6 +861,8 @@ static const CGFloat animationHeight = 15; @@ -856,6 +861,8 @@ static const CGFloat animationHeight = 15;
856 } 861 }
857 if (model.pageStyleList.count>0) { 862 if (model.pageStyleList.count>0) {
858 CNLiveSubSegmentController *subVC = (CNLiveSubSegmentController *)self.listContainerView.validListDict[@(index)]; 863 CNLiveSubSegmentController *subVC = (CNLiveSubSegmentController *)self.listContainerView.validListDict[@(index)];
  864 + subVC.showType = CNLiveSubVCShowtypeClassify;
  865 +
859 if (subVC && [subVC respondsToSelector:@selector(refreshCurrentVCData)]) { 866 if (subVC && [subVC respondsToSelector:@selector(refreshCurrentVCData)]) {
860 [subVC refreshCurrentVCData]; 867 [subVC refreshCurrentVCData];
861 } 868 }
CNLiveVideoClassifyKit/Classes/ClassifyCategory/Controller/CNLiveListController.m
@@ -76,13 +76,17 @@ @@ -76,13 +76,17 @@
76 [self.view addSubview:subVC.view]; 76 [self.view addSubview:subVC.view];
77 [self addChildViewController:subVC]; 77 [self addChildViewController:subVC];
78 [subVC didMoveToParentViewController:self]; 78 [subVC didMoveToParentViewController:self];
79 - //调用当前vc的刷新功能获取数据  
80 - [CNLiveClassifyJumpBridge listViewRefreshWithVC:subVC pageType:_model.pageType.integerValue param:_paramDic refreshTime:time]; 79 +// //调用当前vc的刷新功能获取数据
  80 +// [CNLiveClassifyJumpBridge listViewRefreshWithVC:subVC pageType:_model.pageType.integerValue param:_paramDic refreshTime:time];
81 //监听滑动下拉刷新 81 //监听滑动下拉刷新
82 UIViewController *vc = self.childViewControllers[0]; 82 UIViewController *vc = self.childViewControllers[0];
83 if (([CNLiveListController searchProperties:[vc class] string:@"webView"]||[CNLiveListController searchProperties:[vc.superclass class] string:@"webView"])&&[vc valueForKey:@"webView"]&&[[vc valueForKey:@"webView"] isKindOfClass:[WKWebView class]]) { 83 if (([CNLiveListController searchProperties:[vc class] string:@"webView"]||[CNLiveListController searchProperties:[vc.superclass class] string:@"webView"])&&[vc valueForKey:@"webView"]&&[[vc valueForKey:@"webView"] isKindOfClass:[WKWebView class]]) {
84 WKWebView *webView = (WKWebView *)[vc valueForKey:@"webView"]; 84 WKWebView *webView = (WKWebView *)[vc valueForKey:@"webView"];
85 [webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil]; 85 [webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  86 + if (!self.isLoading) {
  87 + [webView.scrollView.mj_header beginRefreshing];
  88 + }
  89 +
86 if ([webView.scrollView valueForKey:@"mj_header"]) { 90 if ([webView.scrollView valueForKey:@"mj_header"]) {
87 id header = [webView.scrollView valueForKey:@"mj_header"]; 91 id header = [webView.scrollView valueForKey:@"mj_header"];
88 [header addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil]; 92 [header addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];
@@ -91,6 +95,9 @@ @@ -91,6 +95,9 @@
91 }else if ([CNLiveListController searchProperties:[vc class] string:@"collectionView"]&&[vc valueForKey:@"collectionView"] && [[vc valueForKey:@"collectionView"] isKindOfClass:[UICollectionView class]]){ 95 }else if ([CNLiveListController searchProperties:[vc class] string:@"collectionView"]&&[vc valueForKey:@"collectionView"] && [[vc valueForKey:@"collectionView"] isKindOfClass:[UICollectionView class]]){
92 UICollectionView *collectionView = (UICollectionView *)[vc valueForKey:@"collectionView"]; 96 UICollectionView *collectionView = (UICollectionView *)[vc valueForKey:@"collectionView"];
93 [collectionView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil]; 97 [collectionView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  98 + if (!self.isLoading) {
  99 + [collectionView.mj_header beginRefreshing];
  100 + }
94 if ([collectionView valueForKey:@"mj_header"]) { 101 if ([collectionView valueForKey:@"mj_header"]) {
95 id header = [collectionView valueForKey:@"mj_header"]; 102 id header = [collectionView valueForKey:@"mj_header"];
96 [header addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil]; 103 [header addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionNew context:nil];
CNLiveVideoClassifyKit/Classes/ClassifyCategory/Controller/CNLiveSubSegmentController.h
@@ -14,12 +14,16 @@ NS_ASSUME_NONNULL_BEGIN @@ -14,12 +14,16 @@ NS_ASSUME_NONNULL_BEGIN
14 - (void)showGuideShadeViewWithType:(NSInteger)type cellFrame:(CGRect)cellFrame; 14 - (void)showGuideShadeViewWithType:(NSInteger)type cellFrame:(CGRect)cellFrame;
15 15
16 @end 16 @end
17 - 17 +typedef NS_ENUM(NSInteger , CNLiveSubVCShowtype) {
  18 + CNLiveSubVCShowtypeChannel, //频道管理器进入
  19 + CNLiveSubVCShowtypeClassify, //频道选择器展示
  20 +};
18 21
19 @interface CNLiveSubSegmentController : CNCategoryBaseViewController<JXCategoryListContentViewDelegate> 22 @interface CNLiveSubSegmentController : CNCategoryBaseViewController<JXCategoryListContentViewDelegate>
20 23
21 @property (nonatomic, assign) BOOL isBlack; 24 @property (nonatomic, assign) BOOL isBlack;
22 @property (nonatomic, assign) NSInteger selectChannelId; 25 @property (nonatomic, assign) NSInteger selectChannelId;
  26 +@property (nonatomic, assign) CNLiveSubVCShowtype showType;
23 @property (nonatomic, weak) id <CNSubClassifySegmentControllerDelegate>delegate; 27 @property (nonatomic, weak) id <CNSubClassifySegmentControllerDelegate>delegate;
24 28
25 -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model; 29 -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model;
CNLiveVideoClassifyKit/Classes/ClassifyCategory/Controller/CNLiveSubSegmentController.m
@@ -12,6 +12,8 @@ @@ -12,6 +12,8 @@
12 12
13 @interface CNLiveSubSegmentController () 13 @interface CNLiveSubSegmentController ()
14 @property (nonatomic, strong)JXCategoryTitleView *myCategoryView; 14 @property (nonatomic, strong)JXCategoryTitleView *myCategoryView;
  15 +
  16 +@property (nonatomic, strong) CNLiveNavigationBar *navigationBar;
15 @property (nonatomic, strong) QMUIButton *searchBtn; 17 @property (nonatomic, strong) QMUIButton *searchBtn;
16 @property (nonatomic, strong) UIButton *moreBtn; 18 @property (nonatomic, strong) UIButton *moreBtn;
17 @property (nonatomic, strong) UIImageView *bgImgView;//背景图 19 @property (nonatomic, strong) UIImageView *bgImgView;//背景图
@@ -60,7 +62,7 @@ @@ -60,7 +62,7 @@
60 self.backImageH5 = model.backgroundImgH5; 62 self.backImageH5 = model.backgroundImgH5;
61 self.backImage = model.backgroundImg; 63 self.backImage = model.backgroundImg;
62 self.channelId = model.id; 64 self.channelId = model.id;
63 - 65 + self.title = model.showName;
64 self.ld_currentIndex = 0; 66 self.ld_currentIndex = 0;
65 self.selectChannelId = -1; 67 self.selectChannelId = -1;
66 } 68 }
@@ -77,7 +79,11 @@ @@ -77,7 +79,11 @@
77 weakself 79 weakself
78 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { 80 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
79 if (image) { 81 if (image) {
80 - weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; 82 + if (self.showType == CNLiveSubVCShowtypeChannel) {
  83 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width + 50;
  84 + }else{
  85 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width;
  86 + }
81 } 87 }
82 }]; 88 }];
83 } 89 }
@@ -101,10 +107,7 @@ @@ -101,10 +107,7 @@
101 } 107 }
102 } 108 }
103 109
104 - // 添加二级频道右侧的搜索按钮  
105 - [self.view addSubview:self.searchBtn];  
106 self.view.backgroundColor = [UIColor clearColor]; 110 self.view.backgroundColor = [UIColor clearColor];
107 - self.listContainerView.scrollView.scrollEnabled = NO;  
108 self.myCategoryView.titles = self.titles; 111 self.myCategoryView.titles = self.titles;
109 if (CNLiveStringIsEmpty(self.backImage)) { 112 if (CNLiveStringIsEmpty(self.backImage)) {
110 self.view.backgroundColor = CNLiveColorWithHexString(self.backgroundColor); 113 self.view.backgroundColor = CNLiveColorWithHexString(self.backgroundColor);
@@ -123,73 +126,71 @@ @@ -123,73 +126,71 @@
123 self.ld_currentIndex = 0; 126 self.ld_currentIndex = 0;
124 } 127 }
125 self.categoryView.defaultSelectedIndex = self.ld_currentIndex; 128 self.categoryView.defaultSelectedIndex = self.ld_currentIndex;
126 -  
127 - if ([self.channelId isEqualToString:@"219"]) {  
128 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingStatus:) name:WjjAudioPlayerStatusNotification object:nil];  
129 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingSchedule:) name:WjjAudioPlayerScheduleNotification object:nil];  
130 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayFinishedUpdateSchedule:) name:WjjAudioPlayDidFinishNotification object:nil];  
131 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayUpdateInfo:) name:WjjAudioPlayerWhichPlayingNotification object:nil];  
132 -  
133 - [self.view addSubview:self.moreBtn];  
134 - [self.view addSubview:self.progressView];  
135 - [self.progressView addSubview:self.playingImgV];  
136 - [self.playingImgV addSubview:self.playTipImgV];  
137 - [self.progressView addSubview:self.playingBtn];  
138 - YYCache * yyCache = [YYCache cacheWithName:[NSString stringWithFormat:@"CNLastPlayedAudio_%@",CNUserShareModel.uid]];  
139 - CNLiveAlbumAudioListModelModule *model = (CNLiveAlbumAudioListModelModule *)[yyCache objectForKey:[NSString stringWithFormat:@"%@_%@",wjjLastAudioInfoSaveKey,CNUserShareModel.uid]];  
140 - if (model) {  
141 - if (model && !CNLiveStringIsEmpty(model.activityId)) {  
142 - self.playingBtn.userInteractionEnabled = YES;  
143 - self.progressView.hidden = NO;  
144 - } else {  
145 - self.playingBtn.userInteractionEnabled = NO;  
146 - self.progressView.hidden = YES;  
147 - }  
148 - if (model && (!CNLiveStringIsEmpty(model.img) || !CNLiveStringIsEmpty(model.poster) || !CNLiveStringIsEmpty(model.albumImg)) ) {  
149 - [self.playingImgV sd_setImageWithURL:[NSURL URLWithString:model.img?[model.img stringByRemovingPercentEncoding]:(model.poster?[model.poster stringByRemovingPercentEncoding]:[model.albumImg stringByRemovingPercentEncoding])] placeholderImage:[UIImage loadBundleImage:@""]];  
150 - } else {  
151 - self.playingImgV.image = nil;  
152 - } 129 + if (self.showType == CNLiveSubVCShowtypeClassify) {
  130 + self.listContainerView.scrollView.scrollEnabled = NO;
  131 + // 添加二级频道右侧的搜索按钮
  132 + [self.view addSubview:self.searchBtn];
  133 + if ([self.channelId isEqualToString:@"219"]) {
  134 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingStatus:) name:WjjAudioPlayerStatusNotification object:nil];
  135 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingSchedule:) name:WjjAudioPlayerScheduleNotification object:nil];
  136 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayFinishedUpdateSchedule:) name:WjjAudioPlayDidFinishNotification object:nil];
  137 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayUpdateInfo:) name:WjjAudioPlayerWhichPlayingNotification object:nil];
153 138
154 - if ([CNLiveClassifyJumpBridge audioPlayerIsplaying]) {  
155 - self.playTipImgV.hidden = YES;  
156 - [self playingStartAnimating];  
157 - } else {  
158 - self.playTipImgV.hidden = NO;  
159 - [self playingStopAnimating]; 139 + [self.view addSubview:self.moreBtn];
  140 + [self.view addSubview:self.progressView];
  141 + [self.progressView addSubview:self.playingImgV];
  142 + [self.playingImgV addSubview:self.playTipImgV];
  143 + [self.progressView addSubview:self.playingBtn];
  144 + YYCache * yyCache = [YYCache cacheWithName:[NSString stringWithFormat:@"CNLastPlayedAudio_%@",CNUserShareModel.uid]];
  145 + CNLiveAlbumAudioListModelModule *model = (CNLiveAlbumAudioListModelModule *)[yyCache objectForKey:[NSString stringWithFormat:@"%@_%@",wjjLastAudioInfoSaveKey,CNUserShareModel.uid]];
  146 + if (model) {
  147 + if (model && !CNLiveStringIsEmpty(model.activityId)) {
  148 + self.playingBtn.userInteractionEnabled = YES;
  149 + self.progressView.hidden = NO;
  150 + } else {
  151 + self.playingBtn.userInteractionEnabled = NO;
  152 + self.progressView.hidden = YES;
  153 + }
  154 + if (model && (!CNLiveStringIsEmpty(model.img) || !CNLiveStringIsEmpty(model.poster) || !CNLiveStringIsEmpty(model.albumImg)) ) {
  155 + [self.playingImgV sd_setImageWithURL:[NSURL URLWithString:model.img?[model.img stringByRemovingPercentEncoding]:(model.poster?[model.poster stringByRemovingPercentEncoding]:[model.albumImg stringByRemovingPercentEncoding])] placeholderImage:[UIImage loadBundleImage:@""]];
  156 + } else {
  157 + self.playingImgV.image = nil;
  158 + }
  159 +
  160 + if ([CNLiveClassifyJumpBridge audioPlayerIsplaying]) {
  161 + self.playTipImgV.hidden = YES;
  162 + [self playingStartAnimating];
  163 + } else {
  164 + self.playTipImgV.hidden = NO;
  165 + [self playingStopAnimating];
  166 + }
160 } 167 }
  168 + }else if ([self.channelId isEqualToString:@"11"]) {
  169 + // 美食中国 历史记录
  170 + [self.view addSubview:self.historyBtn];
161 } 171 }
162 - }else if ([self.channelId isEqualToString:@"11"]) {  
163 - // 美食中国 历史记录  
164 - [self.view addSubview:self.historyBtn];  
165 - }  
166 -  
167 - self.myCategoryView.top = 0;  
168 - self.searchBtn.right = KScreenWidth-12;  
169 - CGFloat width = self.searchBtn.left;  
170 - self.searchBtn.centerY = self.myCategoryView.height/2;  
171 - if ([self.channelId isEqualToString:@"219"]) {  
172 - self.moreBtn.right = KScreenWidth-12-66-15;  
173 - self.moreBtn.centerY = self.myCategoryView.height/2;  
174 - self.progressView.right = KScreenWidth-93-18-15;  
175 - self.progressView.centerY = self.myCategoryView.height/2;  
176 - width = self.progressView.left;  
177 - }else if ([self.channelId isEqualToString:@"11"]){  
178 - self.historyBtn.right = KScreenWidth-93;  
179 - self.historyBtn.centerY = self.myCategoryView.height/2;  
180 - width = self.historyBtn.left; 172 +
  173 + weakself
  174 + [CNLiveListManager shareListManager].scrollViewDidScrollBlock = ^(BOOL isUp) {
  175 + !weakSelf.scrollViewDidScrollBlock ?: weakSelf.scrollViewDidScrollBlock(isUp);
  176 + };
  177 + }else{
  178 + [self.view addSubview:self.navigationBar];
  179 + self.bgImgView.top = 0;
  180 + self.listContainerView.scrollView.scrollEnabled = YES;
181 } 181 }
182 - self.myCategoryView.width = width;  
183 - weakself  
184 - [CNLiveListManager shareListManager].scrollViewDidScrollBlock = ^(BOOL isUp) {  
185 - !weakSelf.scrollViewDidScrollBlock ?: weakSelf.scrollViewDidScrollBlock(isUp);  
186 - }; 182 +
187 // Do any additional setup after loading the view. 183 // Do any additional setup after loading the view.
188 } 184 }
189 -(void)viewDidLayoutSubviews 185 -(void)viewDidLayoutSubviews
190 { 186 {
191 [super viewDidLayoutSubviews]; 187 [super viewDidLayoutSubviews];
192 - self.myCategoryView.top = 0; 188 + if (self.showType == CNLiveSubVCShowtypeChannel) {
  189 + self.myCategoryView.top = kNavigationBarHeight;
  190 + }else{
  191 + self.myCategoryView.top = 0;
  192 + }
  193 +
193 self.listContainerView.frame = CGRectMake(0, self.myCategoryView.bottom+10, kScreenWidth, self.view.bounds.size.height - self.myCategoryView.bottom); 194 self.listContainerView.frame = CGRectMake(0, self.myCategoryView.bottom+10, kScreenWidth, self.view.bounds.size.height - self.myCategoryView.bottom);
194 self.searchBtn.right = KScreenWidth-12; 195 self.searchBtn.right = KScreenWidth-12;
195 CGFloat width = self.searchBtn.left; 196 CGFloat width = self.searchBtn.left;
@@ -207,6 +208,16 @@ @@ -207,6 +208,16 @@
207 } 208 }
208 self.myCategoryView.width = width-10; 209 self.myCategoryView.width = width-10;
209 } 210 }
  211 +
  212 +- (void)viewWillAppear:(BOOL)animated
  213 +{
  214 + [super viewWillAppear:animated];
  215 + self.navigationController.navigationBarHidden = YES;
  216 +}
  217 +- (void)viewWillDisappear:(BOOL)animated
  218 +{
  219 + [super viewWillDisappear:animated];
  220 +}
210 #pragma mark - Notification 221 #pragma mark - Notification
211 - (void)updatePlayingStatus:(NSNotification *)notifi { 222 - (void)updatePlayingStatus:(NSNotification *)notifi {
212 223
@@ -348,7 +359,11 @@ @@ -348,7 +359,11 @@
348 weakself 359 weakself
349 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { 360 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
350 if (image) { 361 if (image) {
351 - weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; 362 + if (self.showType == CNLiveSubVCShowtypeChannel) {
  363 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width + 50;
  364 + }else{
  365 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width;
  366 + }
352 } 367 }
353 }]; 368 }];
354 CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.pageListArr wjj_safetyObjectAtIndex:self.ld_currentIndex]; 369 CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.pageListArr wjj_safetyObjectAtIndex:self.ld_currentIndex];
@@ -551,7 +566,11 @@ @@ -551,7 +566,11 @@
551 weakself 566 weakself
552 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { 567 [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
553 if (image) { 568 if (image) {
554 - weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; 569 + if (self.showType == CNLiveSubVCShowtypeChannel) {
  570 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width + 50;
  571 + }else{
  572 + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width;
  573 + }
555 } 574 }
556 }]; 575 }];
557 } 576 }
@@ -658,14 +677,26 @@ @@ -658,14 +677,26 @@
658 } 677 }
659 return _moreBtn; 678 return _moreBtn;
660 } 679 }
661 -/*  
662 #pragma mark - Navigation 680 #pragma mark - Navigation
663 681
664 -// In a storyboard-based application, you will often want to do a little preparation before navigation  
665 -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
666 - // Get the new view controller using [segue destinationViewController].  
667 - // Pass the selected object to the new view controller. 682 +- (CNLiveNavigationBar *)navigationBar {
  683 + if (!_navigationBar) {
  684 + _navigationBar = [CNLiveNavigationBar navigationBar];
  685 + _navigationBar.lineHidden = YES;
  686 + _navigationBar.backgroundColor = [UIColor clearColor];
  687 + _navigationBar.title.text = self.title;
  688 + _navigationBar.title.textColor = self.textColor;
  689 + if (!self.isBlack) {
  690 + _navigationBar.leftImage = [UIImage loadBundleImage:@"backWhite"];
  691 + }
  692 + weakself
  693 + _navigationBar.onClickLeftButton = ^{
  694 + strongself
  695 + [self.navigationController popViewControllerAnimated:YES];
  696 + };
  697 + }
  698 + return _navigationBar;
668 } 699 }
669 -*/ 700 +
670 701
671 @end 702 @end
CNLiveVideoClassifyKit/Classes/ClassifyCategory/Header/CNLivevideoClassifyPCH.h
@@ -20,8 +20,10 @@ @@ -20,8 +20,10 @@
20 #import <CNLiveCommonCategory/UIColor+CNLiveExtension.h> 20 #import <CNLiveCommonCategory/UIColor+CNLiveExtension.h>
21 #import <CNLiveBeeHive/BHConfig.h> 21 #import <CNLiveBeeHive/BHConfig.h>
22 #import <CNLiveEnvironment/CNLiveEnvironment.h> 22 #import <CNLiveEnvironment/CNLiveEnvironment.h>
  23 +#import <CNLiveCustomControl/CNLiveNavigationBar.h>
23 #import <MJExtension/MJExtension.h> 24 #import <MJExtension/MJExtension.h>
24 //#import <UMCommon/MobClick.h> 25 //#import <UMCommon/MobClick.h>
  26 +#import <MJRefresh/MJRefresh.h>
25 #import "CNLiveCommonDefines.h" 27 #import "CNLiveCommonDefines.h"
26 #import <QMUIKit/QMUIKit.h> 28 #import <QMUIKit/QMUIKit.h>
27 #import "UIImage+AdBundleImage.h" 29 #import "UIImage+AdBundleImage.h"
Example/CNLiveVideoClassifyKit.xcodeproj/project.pbxproj
@@ -383,6 +383,7 @@ @@ -383,6 +383,7 @@
383 "${BUILT_PRODUCTS_DIR}/CNLiveCWebViewModule/CNLiveCWebViewModule.framework", 383 "${BUILT_PRODUCTS_DIR}/CNLiveCWebViewModule/CNLiveCWebViewModule.framework",
384 "${BUILT_PRODUCTS_DIR}/CNLiveCategory/CNLiveCategory.framework", 384 "${BUILT_PRODUCTS_DIR}/CNLiveCategory/CNLiveCategory.framework",
385 "${BUILT_PRODUCTS_DIR}/CNLiveCommonCategory/CNLiveCommonCategory.framework", 385 "${BUILT_PRODUCTS_DIR}/CNLiveCommonCategory/CNLiveCommonCategory.framework",
  386 + "${BUILT_PRODUCTS_DIR}/CNLiveCustomControl/CNLiveCustomControl.framework",
386 "${BUILT_PRODUCTS_DIR}/CNLiveCustomUI/CNLiveCustomUI.framework", 387 "${BUILT_PRODUCTS_DIR}/CNLiveCustomUI/CNLiveCustomUI.framework",
387 "${BUILT_PRODUCTS_DIR}/CNLiveEnvironment/CNLiveEnvironment.framework", 388 "${BUILT_PRODUCTS_DIR}/CNLiveEnvironment/CNLiveEnvironment.framework",
388 "${BUILT_PRODUCTS_DIR}/CNLiveNewTripartiteManagement/CNLiveNewTripartiteManagement.framework", 389 "${BUILT_PRODUCTS_DIR}/CNLiveNewTripartiteManagement/CNLiveNewTripartiteManagement.framework",
@@ -415,6 +416,7 @@ @@ -415,6 +416,7 @@
415 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCWebViewModule.framework", 416 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCWebViewModule.framework",
416 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCategory.framework", 417 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCategory.framework",
417 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCommonCategory.framework", 418 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCommonCategory.framework",
  419 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomControl.framework",
418 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomUI.framework", 420 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveCustomUI.framework",
419 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveEnvironment.framework", 421 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveEnvironment.framework",
420 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveNewTripartiteManagement.framework", 422 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CNLiveNewTripartiteManagement.framework",
Example/CNLiveVideoClassifyKit/CNLIVEDemoViewController.m
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 -(void)viewDidAppear:(BOOL)animated 22 -(void)viewDidAppear:(BOOL)animated
23 { 23 {
24 [super viewDidAppear:animated]; 24 [super viewDidAppear:animated];
25 - self.navigationController.navigationBarHidden = YES; 25 +// self.navigationController.navigationBarHidden = YES;
26 26
27 } 27 }
28 /* 28 /*
Example/CNLiveVideoClassifyKit/CNLIVEViewController.m
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 -(void)viewDidAppear:(BOOL)animated 50 -(void)viewDidAppear:(BOOL)animated
51 { 51 {
52 [super viewDidAppear:animated]; 52 [super viewDidAppear:animated];
53 - self.navigationController.navigationBarHidden = YES; 53 + self.navigationController.navigationBarHidden = NO;
54 } 54 }
55 #pragma mrk - UICollectionViewDataSource 55 #pragma mrk - UICollectionViewDataSource
56 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 56 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
Example/Podfile.lock
@@ -39,16 +39,24 @@ PODS: @@ -39,16 +39,24 @@ PODS:
39 - CNLiveCommonCategory/ImageInBundle (= 0.5.2) 39 - CNLiveCommonCategory/ImageInBundle (= 0.5.2)
40 - CNLiveCommonCategory/ARC (0.5.2) 40 - CNLiveCommonCategory/ARC (0.5.2)
41 - CNLiveCommonCategory/ImageInBundle (0.5.2) 41 - CNLiveCommonCategory/ImageInBundle (0.5.2)
42 - - CNLiveCustomUI (0.5.6): 42 + - CNLiveCustomControl (0.0.6):
  43 + - CNLiveCustomControl/Button (= 0.0.6)
  44 + - CNLiveCustomControl/NavigationBar (= 0.0.6)
  45 + - CNLiveCustomControl/WebView (= 0.0.6)
  46 + - CNLiveCustomControl/Button (0.0.6)
  47 + - CNLiveCustomControl/NavigationBar (0.0.6):
  48 + - CNLiveCategory
  49 + - CNLiveCustomControl/WebView (0.0.6)
  50 + - CNLiveCustomUI (0.5.7):
43 - CNLiveBaseKit 51 - CNLiveBaseKit
44 - CNLiveBusinessTools 52 - CNLiveBusinessTools
45 - - CNLiveCustomUI/CNLiveBasicsUI (= 0.5.6)  
46 - - CNLiveCustomUI/CNLiveContentToolTextView (= 0.5.6)  
47 - - CNLiveCustomUI/CNLiveCycleScrollView (= 0.5.6)  
48 - - CNLiveCustomUI/CNLiveGetImage (= 0.5.6)  
49 - - CNLiveCustomUI/CNLivePopView (= 0.5.6)  
50 - - CNLiveCustomUI/CNLiveRefresh (= 0.5.6)  
51 - - CNLiveCustomUI/CNLiveBasicsUI (0.5.6): 53 + - CNLiveCustomUI/CNLiveBasicsUI (= 0.5.7)
  54 + - CNLiveCustomUI/CNLiveContentToolTextView (= 0.5.7)
  55 + - CNLiveCustomUI/CNLiveCycleScrollView (= 0.5.7)
  56 + - CNLiveCustomUI/CNLiveGetImage (= 0.5.7)
  57 + - CNLiveCustomUI/CNLivePopView (= 0.5.7)
  58 + - CNLiveCustomUI/CNLiveRefresh (= 0.5.7)
  59 + - CNLiveCustomUI/CNLiveBasicsUI (0.5.7):
52 - CNLiveBaseKit 60 - CNLiveBaseKit
53 - CNLiveBusinessTools 61 - CNLiveBusinessTools
54 - CNLiveCustomUI/CNLiveGetImage 62 - CNLiveCustomUI/CNLiveGetImage
@@ -63,28 +71,28 @@ PODS: @@ -63,28 +71,28 @@ PODS:
63 - CNLiveNewTripartiteManagement/YYModel 71 - CNLiveNewTripartiteManagement/YYModel
64 - CNLiveNewTripartiteManagement/YYText 72 - CNLiveNewTripartiteManagement/YYText
65 - CNLiveNewTripartiteManagement/YYWebImage 73 - CNLiveNewTripartiteManagement/YYWebImage
66 - - CNLiveCustomUI/CNLiveContentToolTextView (0.5.6): 74 + - CNLiveCustomUI/CNLiveContentToolTextView (0.5.7):
67 - CNLiveBaseKit 75 - CNLiveBaseKit
68 - CNLiveBusinessTools 76 - CNLiveBusinessTools
69 - CNLiveNewTripartiteManagement/Masonry 77 - CNLiveNewTripartiteManagement/Masonry
70 - CNLiveNewTripartiteManagement/QMUIKit 78 - CNLiveNewTripartiteManagement/QMUIKit
71 - - CNLiveCustomUI/CNLiveCycleScrollView (0.5.6): 79 + - CNLiveCustomUI/CNLiveCycleScrollView (0.5.7):
72 - CNLiveBaseKit 80 - CNLiveBaseKit
73 - CNLiveBusinessTools 81 - CNLiveBusinessTools
74 - CNLiveNewTripartiteManagement/SDWebImage 82 - CNLiveNewTripartiteManagement/SDWebImage
75 - - CNLiveCustomUI/CNLiveGetImage (0.5.6): 83 + - CNLiveCustomUI/CNLiveGetImage (0.5.7):
76 - CNLiveBaseKit 84 - CNLiveBaseKit
77 - CNLiveBusinessTools 85 - CNLiveBusinessTools
78 - - CNLiveCustomUI/CNLivePopView (0.5.6): 86 + - CNLiveCustomUI/CNLivePopView (0.5.7):
79 - CNLiveBaseKit 87 - CNLiveBaseKit
80 - CNLiveBusinessTools 88 - CNLiveBusinessTools
81 - CNLiveNewTripartiteManagement/QMUIKit 89 - CNLiveNewTripartiteManagement/QMUIKit
82 - - CNLiveCustomUI/CNLiveRefresh (0.5.6): 90 + - CNLiveCustomUI/CNLiveRefresh (0.5.7):
83 - CNLiveBaseKit 91 - CNLiveBaseKit
84 - CNLiveBusinessTools 92 - CNLiveBusinessTools
85 - CNLiveCustomUI/CNLiveGetImage 93 - CNLiveCustomUI/CNLiveGetImage
86 - CNLiveNewTripartiteManagement/MJRefresh 94 - CNLiveNewTripartiteManagement/MJRefresh
87 - - CNLiveCWebViewModule (0.0.15): 95 + - CNLiveCWebViewModule (0.1.2):
88 - CNLiveCustomUI 96 - CNLiveCustomUI
89 - CNLiveEnvironment 97 - CNLiveEnvironment
90 - CNLiveNewTripartiteManagement/Masonry 98 - CNLiveNewTripartiteManagement/Masonry
@@ -95,21 +103,21 @@ PODS: @@ -95,21 +103,21 @@ PODS:
95 - CNLiveUserManagement 103 - CNLiveUserManagement
96 - WebViewJavascriptBridge 104 - WebViewJavascriptBridge
97 - CNLiveEnvironment (0.3.3) 105 - CNLiveEnvironment (0.3.3)
98 - - CNLiveNewTripartiteManagement/Masonry (0.2.0.5): 106 + - CNLiveNewTripartiteManagement/Masonry (0.2.0.6):
99 - Masonry (= 1.1.0) 107 - Masonry (= 1.1.0)
100 - - CNLiveNewTripartiteManagement/MJExtension (0.2.0.5): 108 + - CNLiveNewTripartiteManagement/MJExtension (0.2.0.6):
101 - MJExtension (= 3.2.1) 109 - MJExtension (= 3.2.1)
102 - CNLiveNewTripartiteManagement/MJRefresh (0.2.0.6): 110 - CNLiveNewTripartiteManagement/MJRefresh (0.2.0.6):
103 - MJRefresh (= 3.2.0) 111 - MJRefresh (= 3.2.0)
104 - - CNLiveNewTripartiteManagement/QMUIKit (0.2.0.5): 112 + - CNLiveNewTripartiteManagement/QMUIKit (0.2.0.6):
105 - QMUIKit (= 4.2.1) 113 - QMUIKit (= 4.2.1)
106 - - CNLiveNewTripartiteManagement/SDWebImage (0.2.0.5): 114 + - CNLiveNewTripartiteManagement/SDWebImage (0.2.0.6):
107 - SDWebImage (= 5.2.3) 115 - SDWebImage (= 5.2.3)
108 - CNLiveNewTripartiteManagement/YYAsyncLayer (0.2.0.6): 116 - CNLiveNewTripartiteManagement/YYAsyncLayer (0.2.0.6):
109 - YYAsyncLayer (= 1.0) 117 - YYAsyncLayer (= 1.0)
110 - - CNLiveNewTripartiteManagement/YYCache (0.2.0.5): 118 + - CNLiveNewTripartiteManagement/YYCache (0.2.0.6):
111 - YYCache (= 1.0.4) 119 - YYCache (= 1.0.4)
112 - - CNLiveNewTripartiteManagement/YYCategories (0.2.0.5): 120 + - CNLiveNewTripartiteManagement/YYCategories (0.2.0.6):
113 - YYCategories (= 1.0.4) 121 - YYCategories (= 1.0.4)
114 - CNLiveNewTripartiteManagement/YYDispatchQueuePool (0.2.0.6): 122 - CNLiveNewTripartiteManagement/YYDispatchQueuePool (0.2.0.6):
115 - YYDispatchQueuePool (= 1.0) 123 - YYDispatchQueuePool (= 1.0)
@@ -123,19 +131,21 @@ PODS: @@ -123,19 +131,21 @@ PODS:
123 - YYText (= 1.0.7) 131 - YYText (= 1.0.7)
124 - CNLiveNewTripartiteManagement/YYWebImage (0.2.0.6): 132 - CNLiveNewTripartiteManagement/YYWebImage (0.2.0.6):
125 - YYWebImage (= 1.0.5) 133 - YYWebImage (= 1.0.5)
126 - - CNLiveRequestBastKit (0.2.5.6): 134 + - CNLiveRequestBastKit (0.2.5.7):
127 - AFNetworking 135 - AFNetworking
128 - CNLiveSDK/CNLiveStat (0.3.4.8) 136 - CNLiveSDK/CNLiveStat (0.3.4.8)
129 - CNLiveUserManagement (0.1.5): 137 - CNLiveUserManagement (0.1.5):
130 - CNLiveNewTripartiteManagement/MJExtension 138 - CNLiveNewTripartiteManagement/MJExtension
131 - - CNLiveVideoClassifyKit (0.0.23): 139 + - CNLiveVideoClassifyKit (0.0.30):
132 - CNLiveBaseKit 140 - CNLiveBaseKit
133 - CNLiveBeeHive 141 - CNLiveBeeHive
134 - CNLiveCategory 142 - CNLiveCategory
135 - CNLiveCommonCategory 143 - CNLiveCommonCategory
  144 + - CNLiveCustomControl
136 - CNLiveEnvironment 145 - CNLiveEnvironment
137 - CNLiveNewTripartiteManagement/Masonry 146 - CNLiveNewTripartiteManagement/Masonry
138 - CNLiveNewTripartiteManagement/MJExtension 147 - CNLiveNewTripartiteManagement/MJExtension
  148 + - CNLiveNewTripartiteManagement/MJRefresh
139 - CNLiveNewTripartiteManagement/QMUIKit 149 - CNLiveNewTripartiteManagement/QMUIKit
140 - CNLiveNewTripartiteManagement/SDWebImage 150 - CNLiveNewTripartiteManagement/SDWebImage
141 - CNLiveNewTripartiteManagement/YYCache 151 - CNLiveNewTripartiteManagement/YYCache
@@ -468,7 +478,7 @@ PODS: @@ -468,7 +478,7 @@ PODS:
468 - SDWebImage (5.2.3): 478 - SDWebImage (5.2.3):
469 - SDWebImage/Core (= 5.2.3) 479 - SDWebImage/Core (= 5.2.3)
470 - SDWebImage/Core (5.2.3) 480 - SDWebImage/Core (5.2.3)
471 - - UMAPM (1.5.2) 481 + - UMAPM (1.5.5)
472 - UMCCommon (7.3.5): 482 - UMCCommon (7.3.5):
473 - UMAPM 483 - UMAPM
474 - UMDevice 484 - UMDevice
@@ -504,6 +514,7 @@ SPEC REPOS: @@ -504,6 +514,7 @@ SPEC REPOS:
504 - CNLiveBusinessTools 514 - CNLiveBusinessTools
505 - CNLiveCategory 515 - CNLiveCategory
506 - CNLiveCommonCategory 516 - CNLiveCommonCategory
  517 + - CNLiveCustomControl
507 - CNLiveCustomUI 518 - CNLiveCustomUI
508 - CNLiveCWebViewModule 519 - CNLiveCWebViewModule
509 - CNLiveEnvironment 520 - CNLiveEnvironment
@@ -545,14 +556,15 @@ SPEC CHECKSUMS: @@ -545,14 +556,15 @@ SPEC CHECKSUMS:
545 CNLiveBusinessTools: dfd3270d885523be2599bdc3a95a416277682d0d 556 CNLiveBusinessTools: dfd3270d885523be2599bdc3a95a416277682d0d
546 CNLiveCategory: c90a01af1e20cd89f47d4f551d47d2ddc9ca96f3 557 CNLiveCategory: c90a01af1e20cd89f47d4f551d47d2ddc9ca96f3
547 CNLiveCommonCategory: 22c9842b31f2087803ae69e983b2c944fb80eae1 558 CNLiveCommonCategory: 22c9842b31f2087803ae69e983b2c944fb80eae1
548 - CNLiveCustomUI: 55057d1da8c3b6987d8b427ae251db1dc71a3a19  
549 - CNLiveCWebViewModule: 27d1bbc10be19f90830a1671983d42eb4d34d7d8 559 + CNLiveCustomControl: a692e47171afb799cebc210a8e77c5a4ddfc2099
  560 + CNLiveCustomUI: b704f07f5f734e45c06bda1877e67b5f9e5d3581
  561 + CNLiveCWebViewModule: 1af1e2853cc1203dacad5a66e8215e62ede2bfc9
550 CNLiveEnvironment: 6af0a2f332b704ffdec67106b4ba044c7f8da371 562 CNLiveEnvironment: 6af0a2f332b704ffdec67106b4ba044c7f8da371
551 CNLiveNewTripartiteManagement: 29ddb2d23ee77bcd42ba5eaf5f1322ed37db5baa 563 CNLiveNewTripartiteManagement: 29ddb2d23ee77bcd42ba5eaf5f1322ed37db5baa
552 - CNLiveRequestBastKit: c6ae13843ee0f96082c58230dc92c249edd6220f 564 + CNLiveRequestBastKit: 9fe28913b94a0a072298eba3356f17b98ef0b6cd
553 CNLiveSDK: 75bafaafbb8c09dcb4420adfe0f05130405b25e7 565 CNLiveSDK: 75bafaafbb8c09dcb4420adfe0f05130405b25e7
554 CNLiveUserManagement: ead053f2d701b01ea8fb5f1da572be788f2dd3cf 566 CNLiveUserManagement: ead053f2d701b01ea8fb5f1da572be788f2dd3cf
555 - CNLiveVideoClassifyKit: 361be0bea9fa85e6d819e88f7a0d83565dce2253 567 + CNLiveVideoClassifyKit: 69256224dd4833a46653960b28576b9f42574e24
556 FWDebug: 5a20d089a300517153de1438d8128ad4c4690951 568 FWDebug: 5a20d089a300517153de1438d8128ad4c4690951
557 JXCategoryView: 2ef9ecfd3735158d009ce02d1f29811aa822da65 569 JXCategoryView: 2ef9ecfd3735158d009ce02d1f29811aa822da65
558 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 570 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
@@ -560,7 +572,7 @@ SPEC CHECKSUMS: @@ -560,7 +572,7 @@ SPEC CHECKSUMS:
560 MJRefresh: ed450d6eb9d3346a2cb033ab7eb6de090aeef437 572 MJRefresh: ed450d6eb9d3346a2cb033ab7eb6de090aeef437
561 QMUIKit: 15294d6a350466e4a6f4df0333eac5bff474f995 573 QMUIKit: 15294d6a350466e4a6f4df0333eac5bff474f995
562 SDWebImage: 46a7f73228f84ce80990c786e4372cf4db5875ce 574 SDWebImage: 46a7f73228f84ce80990c786e4372cf4db5875ce
563 - UMAPM: 163962b8a6ec1a10a3034468da070b28ca510d5b 575 + UMAPM: 1ab13287a2b05c1d491009321270daddf5659a74
564 UMCCommon: 3c535e9e3958f72df075cc6fe4776fb5e403c8bc 576 UMCCommon: 3c535e9e3958f72df075cc6fe4776fb5e403c8bc
565 UMDevice: c13bbb2e8ca6c67d1e23e03162553e3ec5a8b5b0 577 UMDevice: c13bbb2e8ca6c67d1e23e03162553e3ec5a8b5b0
566 WebViewJavascriptBridge: 7f5bc4d3581e672e8f32bd0f812d54bc69bb8e29 578 WebViewJavascriptBridge: 7f5bc4d3581e672e8f32bd0f812d54bc69bb8e29