Commit a08a9751eea8fd1f4df72b1b382c5d5bae40f0d0
1 parent
90108bd0
no message
Showing
50 changed files
with
1628 additions
and
70 deletions
CNLiveVideoClassifyKit.podspec
| ... | ... | @@ -38,6 +38,7 @@ TODO: Add long description of the pod here. |
| 38 | 38 | # } |
| 39 | 39 | s.prefix_header_contents = '#import "CNLivevideoClassifyPCH.h"' |
| 40 | 40 | s.public_header_files = 'Pod/Classes/**/*.h' |
| 41 | +# s.static_framework = true | |
| 41 | 42 | s.frameworks = 'UIKit', 'MapKit' |
| 42 | 43 | s.dependency 'JXCategoryView' |
| 43 | 44 | s.dependency 'CNLiveTripartiteManagement/MJExtension' |
| ... | ... | @@ -47,6 +48,7 @@ TODO: Add long description of the pod here. |
| 47 | 48 | s.dependency 'CNLiveCommonCategory' |
| 48 | 49 | s.dependency 'CNLiveBeeHive' |
| 49 | 50 | s.dependency 'CNLiveEnvironment' |
| 51 | + s.dependency 'UMCCommon' | |
| 50 | 52 | s.dependency 'CNLiveTripartiteManagement/SDWebImage' |
| 51 | 53 | s.dependency 'CNLiveTripartiteManagement/Masonry' |
| 52 | 54 | s.dependency 'CNLiveTripartiteManagement/YYKit' | ... | ... |
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/ClassifyMore@2x.png
0 → 100644
496 Bytes
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/ClassifyMore@3x.png
0 → 100644
831 Bytes
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/dzty-text@2x.png
0 → 100644
29.6 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/dzty-text@3x.png
0 → 100644
125 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/dzty@2x.png
0 → 100644
3.17 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/dzty@3x.png
0 → 100644
8.17 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/listen_downloading@2x.png
0 → 100644
1.19 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/listen_downloading@3x.png
0 → 100644
2.15 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/listen_historey@2x.png
0 → 100644
1.24 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/listen_historey@3x.png
0 → 100644
2.37 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz-arrow@2x.png
0 → 100644
5.21 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz-arrow@3x.png
0 → 100644
13.1 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz-new-text@2x.png
0 → 100644
12.7 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz-new-text@3x.png
0 → 100644
54.8 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz@2x.png
0 → 100644
1.77 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjz@3x.png
0 → 100644
6.69 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjzgx_an@2x.png
0 → 100644
7.28 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/mjzgx_an@3x.png
0 → 100644
19.4 KB
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/playBtn@2x.png
0 → 100644
418 Bytes
CNLiveVideoClassifyKit/Assets/CNSegmentControl.bundle/playBtn@3x.png
0 → 100644
667 Bytes
CNLiveVideoClassifyKit/Classes/Controller/CNCategoryBaseViewController.h
| ... | ... | @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN |
| 23 | 23 | -(void)addTheFirstPage; //默认页 |
| 24 | 24 | -(JXCategoryBaseView *)preferredCategoryView; |
| 25 | 25 | -(CGFloat)preferredCategoryViewHeight; |
| 26 | +-(void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index; | |
| 26 | 27 | @end |
| 27 | 28 | |
| 28 | 29 | NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Controller/CNCategoryBaseViewController.m
| ... | ... | @@ -102,6 +102,7 @@ |
| 102 | 102 | [self.pageViewController setViewControllers:@[vc] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; |
| 103 | 103 | }else |
| 104 | 104 | { |
| 105 | + self.ld_currentIndex = index; | |
| 105 | 106 | [self.pageViewController setViewControllers:@[vc] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL]; |
| 106 | 107 | } |
| 107 | 108 | } | ... | ... |
CNLiveVideoClassifyKit/Classes/Controller/CNLiveClassifySegmentController.h
CNLiveVideoClassifyKit/Classes/Controller/CNLiveClassifySegmentController.m
| ... | ... | @@ -11,23 +11,32 @@ |
| 11 | 11 | #import "CNCategoryGetChannelModel.h" |
| 12 | 12 | #import "CNLiveListManager.h" |
| 13 | 13 | #import "CNLiveSubSegmentController.h" |
| 14 | +#import "CNWebRedirectHandle.h" | |
| 15 | +#import "CNWitnessShadeManager.h" | |
| 16 | +#import "CNSupervisionGuideViewManager.h" | |
| 14 | 17 | |
| 15 | 18 | static const CGFloat animationTime = 0.3; |
| 16 | 19 | static const CGFloat animationHeight = 15; |
| 17 | 20 | |
| 18 | -@interface CNLiveClassifySegmentController ()<JXCategoryViewDelegate,CNCustomChannelListViewDelegate> | |
| 21 | +@interface CNLiveClassifySegmentController ()<JXCategoryViewDelegate,CNCustomChannelListViewDelegate,CNSubClassifySegmentControllerDelegate> | |
| 19 | 22 | |
| 20 | 23 | @property (nonatomic, strong)JXCategoryTitleImageView *myCategoryView; //选择器 |
| 21 | 24 | @property (nonatomic, strong) UIButton *customChannelsBtn; |
| 22 | 25 | @property (nonatomic, strong) UIButton *loginBtn; |
| 23 | 26 | @property (nonatomic, strong) CNCustomChannelListView *customChannelsV; |
| 24 | -//@property (nonatomic, strong) CNTouristsLoginTipsView *fuzzyView;//游客登录弹框 | |
| 27 | +@property (nonatomic, strong) UIView *fuzzyView;//游客登录弹框 | |
| 25 | 28 | @property (nonatomic, strong) UIImageView *topBgImg; //头部图片 |
| 26 | 29 | @property (nonatomic, assign) CGFloat topBgImgHeight;//头部图片高度 |
| 27 | 30 | @property (nonatomic, assign) CGFloat lastOffsetY; |
| 28 | 31 | |
| 32 | +@property (nonatomic, assign) NSInteger isLoginIndex; | |
| 29 | 33 | |
| 30 | 34 | @property (nonatomic, strong) NSString * currentAtatusColor; |
| 35 | +//电商通知返回 | |
| 36 | +@property (nonatomic, copy) NSString *naviBackgroundColor; | |
| 37 | +@property (nonatomic, copy) NSString *naviNormalTitleColor; | |
| 38 | +@property (nonatomic, copy) NSString *naviSelectTitleColor; | |
| 39 | +@property (nonatomic, assign) NSUInteger statusState; | |
| 31 | 40 | |
| 32 | 41 | @property (nonatomic, strong) NSMutableArray *dataArray; //数据 |
| 33 | 42 | @property (nonatomic, strong) NSMutableArray *bgImages; //背景图 |
| ... | ... | @@ -42,6 +51,8 @@ static const CGFloat animationHeight = 15; |
| 42 | 51 | @property (nonatomic, assign) BOOL isEditing; |
| 43 | 52 | @property (nonatomic, assign) BOOL oldStatusBar; |
| 44 | 53 | @property (nonatomic, assign) BOOL isLoading; |
| 54 | +@property (nonatomic, assign) BOOL isDSShopChanged; | |
| 55 | +@property (nonatomic, assign) BOOL contentLogin;//从内容跳过来的 | |
| 45 | 56 | |
| 46 | 57 | @end |
| 47 | 58 | |
| ... | ... | @@ -49,10 +60,15 @@ static const CGFloat animationHeight = 15; |
| 49 | 60 | static CGFloat moveHeight = 50; |
| 50 | 61 | - (void)viewDidLoad { |
| 51 | 62 | [super viewDidLoad]; |
| 52 | - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(classifyChannelsRequest:) name:CNWjjClassifyChannelsRequestStateNotifiName object:nil]; | |
| 53 | - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(classifyChannelsRequestedHideLoading:) name:CNWjjClassifyChannelsRequestHideLoadingNotifiName object:nil]; | |
| 63 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(DSShopNavColorChange:) name:CNWjjDSShopNavColorChangeNotifiName object:nil]; | |
| 64 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(PageControlScrollEnable:) name:kDSHappinessPageControlScrollEnableNotification object:nil]; | |
| 65 | + self.navigationController.navigationBar.barTintColor = kWhiteColor; | |
| 66 | + [CNWebRedirectHandle manager].isSelectedClassify = YES; | |
| 67 | + [BHConfig set:CNLiveLaunchWithFirsh boolValue:NO]; | |
| 68 | + | |
| 54 | 69 | self.topBgImgHeight = kStatusHeight+100; |
| 55 | 70 | self.ld_currentIndex = 0; |
| 71 | + self.isLoginIndex = -1; | |
| 56 | 72 | [self.view addSubview:self.topBgImg]; |
| 57 | 73 | [self.view sendSubviewToBack:self.topBgImg]; |
| 58 | 74 | [self dataDivideIntoNormalAndOtherWithFirst:YES]; |
| ... | ... | @@ -79,39 +95,129 @@ static CGFloat moveHeight = 50; |
| 79 | 95 | if (!self.isLoading) { |
| 80 | 96 | [self uploadSubViews]; |
| 81 | 97 | } |
| 82 | - | |
| 98 | + if (![CNUserShareManager isLogin]) { | |
| 99 | + NSString *showGuide = [[NSUserDefaults standardUserDefaults] objectForKey:CNLiveNetAddShowGuideKey]; | |
| 100 | + if ([showGuide isEqualToString:@"1"] && ![BHConfig boolValue:ChannelsShowGuide]) { | |
| 101 | + NSString *showGuideH = [[NSUserDefaults standardUserDefaults] objectForKey:CNLiveNetAddShowGuideHKey]; | |
| 102 | + BOOL result = [self judgeShowGuide:showGuideH]; | |
| 103 | + if (!result) { | |
| 104 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpShowLoginView]; | |
| 105 | + } | |
| 106 | + } else { | |
| 107 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpShowLoginView]; | |
| 108 | + } | |
| 109 | + } | |
| 110 | + if (![CNUserShareManager isLogin]) { | |
| 111 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"is_Active_Application"]; | |
| 112 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 113 | + } | |
| 114 | + NSString *channelId = [BHConfig get:ChannelsSelectFirst]; | |
| 115 | + [BHConfig set:ChannelsSelectFirst value:@""]; | |
| 116 | + NSInteger selectChannelId = -1; | |
| 117 | + if (!CNLiveStringIsEmpty(channelId)) { | |
| 118 | + selectChannelId = [self containsWithChannelId:channelId]; | |
| 119 | + if (selectChannelId != -1) { | |
| 120 | + self.isLoginIndex = selectChannelId; | |
| 121 | + } | |
| 122 | + } | |
| 123 | + if ([CNWebRedirectHandle manager].isClickedIntegral) { | |
| 124 | + [CNWebRedirectHandle manager].isClickedIntegral = NO; | |
| 125 | + [self categoryView:self.myCategoryView didSelectedItemAtIndex:[CNWebRedirectHandle manager].channelId]; | |
| 126 | + CNLiveSubSegmentController *svc = [self.controllersArr safetyObjectAtIndex:[CNWebRedirectHandle manager].classifyId]; | |
| 127 | + if([svc isKindOfClass:[CNLiveSubSegmentController class]]){ | |
| 128 | + //目击者 - 今日要闻 - 中国冰雪 | |
| 129 | + [svc categoryView:svc.categoryView didSelectedItemAtIndex:[CNWebRedirectHandle manager].classifyId]; | |
| 130 | + } | |
| 131 | + [CNWebRedirectHandle manager].channelId = 0; | |
| 132 | + [CNWebRedirectHandle manager].classifyId = 0; | |
| 133 | + } else { | |
| 134 | + | |
| 135 | + if (!CNLiveStringIsEmpty(channelId)) { | |
| 136 | + self.contentLogin = YES; | |
| 137 | + if(selectChannelId == -1){ | |
| 138 | + //我的频道中没有这个频道 | |
| 139 | + [self categoryView:self.myCategoryView didSelectedItemAtIndex:self.ld_currentIndex]; | |
| 140 | + self.fuzzyView = [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpShowFuzzyView]; | |
| 141 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(touristsLoginTipsViewIsClassify:) name:TouristloginTipsViewActionNotification object:nil]; | |
| 142 | + } else { | |
| 143 | + [self categoryView:self.myCategoryView didSelectedItemAtIndex:selectChannelId]; | |
| 144 | + } | |
| 145 | + //最后判断是否有url// | |
| 146 | + NSString *url = [BHConfig get:LoginPrepositionUrl]; | |
| 147 | + if(url && ![url isEqualToString:@""]){ | |
| 148 | + if ([url isEqualToString:@"DSShopLoginUrl"]) { | |
| 149 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushShopSDKVC]; | |
| 150 | + } | |
| 151 | + else if ([url isEqualToString:@"judgeGiftUrl"]) { | |
| 152 | + NSURL *otherUrl = [BHConfig get:ActivityNewUrl]; | |
| 153 | + if (otherUrl && [CNUserShareManager isLogin]) { | |
| 154 | + [CNLiveClassifyJumpBridge checkForloginTurnToWithURL:otherUrl]; | |
| 155 | + } | |
| 156 | + } | |
| 157 | + else { | |
| 158 | + [CNLiveClassifyJumpBridge checkWithFunctionForShareURL:url]; | |
| 159 | + } | |
| 160 | + } else { | |
| 161 | + if ([CNUserShareManager isLogin]) { | |
| 162 | + NSURL *otherUrl = [BHConfig get:ActivityNewUrl]; | |
| 163 | + if (otherUrl) { | |
| 164 | + [CNLiveClassifyJumpBridge checkForloginTurnToWithURL:otherUrl]; | |
| 165 | + } | |
| 166 | + } | |
| 167 | + } | |
| 168 | + } else { | |
| 169 | + [self categoryView:self.myCategoryView didSelectedItemAtIndex:self.ld_currentIndex]; | |
| 170 | + } | |
| 171 | + } | |
| 83 | 172 | // Do any additional setup after loading the view. |
| 84 | 173 | } |
| 174 | +-(void)viewWillAppear:(BOOL)animated { | |
| 175 | + | |
| 176 | + [super viewWillAppear:animated]; | |
| 177 | + if (![[NSUserDefaults standardUserDefaults] boolForKey:CNLiveLaunchWithFirsh]) { | |
| 178 | + [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveDeepLinkPushNotification object:nil]; | |
| 179 | + [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveRemotePushNotification object:nil]; | |
| 180 | + } | |
| 181 | + self.navigationController.navigationBar.hidden = YES; | |
| 182 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:CNLiveLaunchWithFirsh]; | |
| 183 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 184 | + self.tabBarController.tabBar.hidden = NO; | |
| 185 | +} | |
| 186 | +- (void)viewDidAppear:(BOOL)animated { | |
| 187 | + [super viewDidAppear:animated]; | |
| 85 | 188 | |
| 189 | + if ([[NSUserDefaults standardUserDefaults] boolForKey:CNLiveLaunchWithFirsh] && ![BHConfig get:CNLiveLaunchWithFirsh]) { | |
| 190 | + [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveDeepLinkPushNotification object:nil]; | |
| 191 | + [[NSNotificationCenter defaultCenter] postNotificationName:kCNLiveRemotePushNotification object:nil]; | |
| 192 | + } | |
| 193 | +} | |
| 194 | +- (void)viewWillDisappear:(BOOL)animated { | |
| 195 | + [super viewWillDisappear:animated]; | |
| 196 | + [self quitCustomChannels]; | |
| 197 | + self.navigationController.navigationBar.hidden = NO; | |
| 198 | +} | |
| 199 | +- (void)dealloc | |
| 200 | +{ | |
| 201 | + [[NSNotificationCenter defaultCenter] removeObserver:self]; | |
| 202 | + NSLog(@"CNClassifySegmentController dealloc"); | |
| 203 | +} | |
| 86 | 204 | -(void)viewDidLayoutSubviews |
| 87 | 205 | { |
| 88 | 206 | [super viewDidLayoutSubviews]; |
| 89 | 207 | self.pageViewController.view.frame = CGRectMake(0, self.myCategoryView.bottom, kScreenWidth, self.view.bounds.size.height - self.myCategoryView.bottom+ moveHeight); |
| 90 | 208 | if ([CNUserShareManager isLogin]) { |
| 91 | 209 | self.myCategoryView.width = kScreenWidth - 45; |
| 92 | - self.customChannelsBtn.centerY = self.myCategoryView.centerY; | |
| 210 | + self.customChannelsBtn.centerY = self.myCategoryView.height/2 + kStatusHeight; | |
| 93 | 211 | self.customChannelsBtn.right = kScreenWidth - 18; |
| 94 | 212 | }else |
| 95 | 213 | { |
| 96 | 214 | self.myCategoryView.width = kScreenWidth - 70; |
| 97 | - self.loginBtn.centerY = self.myCategoryView.centerY; | |
| 215 | + self.loginBtn.centerY = self.myCategoryView.height/2 + kStatusHeight; | |
| 98 | 216 | self.loginBtn.right = kScreenWidth - 11; |
| 99 | 217 | } |
| 100 | 218 | |
| 101 | 219 | } |
| 102 | 220 | |
| 103 | --(void)viewDidAppear:(BOOL)animated | |
| 104 | -{ | |
| 105 | - [super viewDidAppear:animated]; | |
| 106 | - | |
| 107 | -} | |
| 108 | - | |
| 109 | --(void)viewDidDisappear:(BOOL)animated | |
| 110 | -{ | |
| 111 | - [super viewDidDisappear: animated]; | |
| 112 | - [self quitCustomChannels]; | |
| 113 | -} | |
| 114 | - | |
| 115 | 221 | |
| 116 | 222 | -(UIStatusBarStyle)preferredStatusBarStyle |
| 117 | 223 | { |
| ... | ... | @@ -157,6 +263,10 @@ static CGFloat moveHeight = 50; |
| 157 | 263 | self.topBgImg.frame = CGRectMake(0, 0, KScreenWidth, self.topBgImgHeight); |
| 158 | 264 | CNLiveSubSegmentController *subVC = [[CNLiveSubSegmentController alloc] initWithModel:model]; |
| 159 | 265 | subVC.isBlack = isBlack; |
| 266 | + subVC.delegate = self; | |
| 267 | + if (i == self.isLoginIndex) { | |
| 268 | + subVC.selectChannelId = i; | |
| 269 | + } | |
| 160 | 270 | weakself |
| 161 | 271 | subVC.scrollViewDidScrollBlock = ^(BOOL isUp) { |
| 162 | 272 | [weakSelf scrollViewUpDowm:isUp]; |
| ... | ... | @@ -175,6 +285,9 @@ static CGFloat moveHeight = 50; |
| 175 | 285 | } |
| 176 | 286 | } |
| 177 | 287 | [self addTheFirstPage]; |
| 288 | + if (![CNUserShareManager isLogin]) { | |
| 289 | + [CNLiveClassifyJumpBridge bringCenterLoginViewToFront]; | |
| 290 | + } | |
| 178 | 291 | } |
| 179 | 292 | |
| 180 | 293 | |
| ... | ... | @@ -193,7 +306,63 @@ static CGFloat moveHeight = 50; |
| 193 | 306 | |
| 194 | 307 | [QMUITips hideAllTipsInView:self.view]; |
| 195 | 308 | } |
| 309 | +// 电商中国通过电商SDK发通知修改电商频道的选择器样式 | |
| 310 | +- (void)DSShopNavColorChange:(NSNotification *)noti { | |
| 311 | + | |
| 312 | + self.naviBackgroundColor = [noti.userInfo objectForKey:@"naviBackgroundColor"]; | |
| 313 | + self.naviNormalTitleColor = [noti.userInfo objectForKey:@"naviNormalTitleColor"]; | |
| 314 | + self.naviSelectTitleColor = [noti.userInfo objectForKey:@"naviSelectTitleColor"]; | |
| 315 | + self.statusState = [[noti.userInfo objectForKey:@"statusState"] integerValue]; | |
| 316 | + | |
| 317 | + if (CNLiveStringIsEmpty(self.naviBackgroundColor)||CNLiveStringIsEmpty(self.naviNormalTitleColor)||CNLiveStringIsEmpty(self.naviSelectTitleColor)) { | |
| 318 | + return; | |
| 319 | + } | |
| 320 | + // 判断是否是电商中国 | |
| 321 | + NSInteger selectedIndex = self.myCategoryView.selectedIndex>=self.dataArray.count?0:self.myCategoryView.selectedIndex; | |
| 322 | + NSString *dataStr = [self.dataArray safetyObjectAtIndex:selectedIndex]; | |
| 323 | + NSMutableDictionary *dataDic = [[NSMutableDictionary alloc] initWithDictionary:CNLiveStringJsonToDictionary(dataStr)]; | |
| 324 | + if ([[dataDic objectForKey:@"pageType"] integerValue] != 2) {//电商中国 | |
| 325 | + return; | |
| 326 | + } | |
| 327 | + // 改变电商中国channels UI | |
| 328 | + self.myCategoryView.titleColor = CNLiveColorWithHexString(self.naviNormalTitleColor); | |
| 329 | + self.myCategoryView.titleSelectedColor = CNLiveColorWithHexString(self.naviSelectTitleColor); | |
| 330 | + self.topBgImg.backgroundColor = CNLiveColorWithHexString(self.naviBackgroundColor); | |
| 331 | + self.currentAtatusColor = [NSString stringWithFormat:@"%lu",(unsigned long)self.statusState]; | |
| 332 | + [self setNeedsStatusBarAppearanceUpdate]; | |
| 333 | + | |
| 334 | + // 改变数据 | |
| 335 | + [self.textColors replaceObjectAtIndex:selectedIndex withObject:CNLiveColorWithHexString(self.naviNormalTitleColor)]; | |
| 336 | + [self.textColorSeleteds replaceObjectAtIndex:selectedIndex withObject:CNLiveColorWithHexString(self.naviSelectTitleColor)]; | |
| 337 | + [self.statusBarColors replaceObjectAtIndex:selectedIndex withObject:self.statusState==0 ? @"0" : @"1"]; | |
| 338 | + [self.bgColors replaceObjectAtIndex:selectedIndex withObject:self.naviBackgroundColor]; | |
| 339 | + self.isDSShopChanged = YES; //改变过 | |
| 340 | + | |
| 341 | +} | |
| 196 | 342 | |
| 343 | +// 电商中国可以下拉出地图页面 当下拉出地图页面时不可以左右滚动 | |
| 344 | +- (void)PageControlScrollEnable:(NSNotification *)noti { | |
| 345 | + if (!self.findScrollView.isScrollEnabled) { | |
| 346 | + return; | |
| 347 | + } | |
| 348 | + BOOL scrollEnable = [noti.object boolValue]; | |
| 349 | + NSLog(@"是否可滚动:%d",scrollEnable); | |
| 350 | + self.findScrollView.scrollEnabled = scrollEnable; | |
| 351 | +} | |
| 352 | + | |
| 353 | +- (void)touristsLoginTipsViewIsClassify:(NSNotification *)noti{ | |
| 354 | + NSString *isClassify = noti.userInfo[@"isClassify"]; | |
| 355 | + if([isClassify isEqualToString:@"close"]){ | |
| 356 | + //隐藏TouristsLoginTipsView | |
| 357 | + [self.fuzzyView removeFromSuperview]; | |
| 358 | + | |
| 359 | + }else if([isClassify isEqualToString:@"jump"]){ | |
| 360 | + //进入频道管理页面 | |
| 361 | + [self.fuzzyView removeFromSuperview]; | |
| 362 | + [self customAction:self.customChannelsBtn]; | |
| 363 | + } | |
| 364 | + [[NSNotificationCenter defaultCenter] removeObserver:self name:TouristloginTipsViewActionNotification object:nil]; | |
| 365 | +} | |
| 197 | 366 | #pragma mark - Action |
| 198 | 367 | // 点击定制频道按钮进入定制 |
| 199 | 368 | - (void)customAction:(UIButton *)sender { |
| ... | ... | @@ -219,10 +388,51 @@ static CGFloat moveHeight = 50; |
| 219 | 388 | |
| 220 | 389 | } |
| 221 | 390 | #pragma mark - Method |
| 391 | +- (NSInteger)containsWithChannelId:(NSString *)channelId { | |
| 392 | + NSString *normalKey = [NSString stringWithFormat:@"%@_%@",NormalChannelArray,CNUserShareModel.uid]; | |
| 393 | + NSMutableArray *channelArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:normalKey]]; | |
| 394 | + | |
| 395 | + NSInteger i = 0; | |
| 396 | + for (NSString *str in channelArray) { | |
| 397 | + NSDictionary *dic = CNLiveStringJsonToDictionary(str); | |
| 398 | + CNCategoryGetChannelModel *model = [CNCategoryGetChannelModel mj_objectWithKeyValues:dic]; | |
| 399 | + if ([model.id isEqualToString:channelId]) { | |
| 400 | + return i; | |
| 401 | + } | |
| 402 | + i++; | |
| 403 | + } | |
| 404 | + return -1; | |
| 405 | +} | |
| 406 | +- (BOOL)judgeShowGuide:(NSString *)guide { | |
| 407 | + | |
| 408 | + if (CNLiveStringIsEmpty(guide)) { | |
| 409 | + return NO;; | |
| 410 | + } | |
| 411 | + NSString *locaVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; | |
| 412 | + | |
| 413 | + if ([locaVersion compare:guide options:NSNumericSearch]==NSOrderedAscending) { | |
| 414 | + //show | |
| 415 | + [BHConfig set:ChannelsShowGuide boolValue:YES]; | |
| 416 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpShowGuideView]; | |
| 417 | + return YES; | |
| 418 | + } else { | |
| 419 | + return NO; | |
| 420 | + } | |
| 421 | +} | |
| 222 | 422 | -(void)updateSelectColors:(NSInteger)index |
| 223 | 423 | { |
| 224 | 424 | NSString *backgroundImage = [self.bgImages safetyObjectAtIndex:index]; |
| 225 | - [self.topBgImg sd_setImageWithURL:[NSURL URLWithString:backgroundImage]]; | |
| 425 | + weakself | |
| 426 | + [self.topBgImg sd_setImageWithURL:[NSURL URLWithString:backgroundImage] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { | |
| 427 | + if (image) { | |
| 428 | + weakSelf.topBgImgHeight = KScreenWidth*image.size.height/image.size.width; | |
| 429 | + } else { | |
| 430 | + weakSelf.topBgImgHeight = kStatusHeight+100; | |
| 431 | + } | |
| 432 | + weakSelf.topBgImg.height = weakSelf.topBgImgHeight; | |
| 433 | + weakSelf.topBgImg.bottom = kStatusHeight+100; | |
| 434 | + weakSelf.myCategoryView.bottom = weakSelf.topBgImg.height-60; | |
| 435 | + }]; | |
| 226 | 436 | NSString *backgroundColor = [self.bgColors safetyObjectAtIndex:index]; |
| 227 | 437 | self.topBgImg.backgroundColor = CNLiveColorWithHexString(backgroundColor); |
| 228 | 438 | self.myCategoryView.titleColor = self.textColors[index]; |
| ... | ... | @@ -317,6 +527,9 @@ static CGFloat moveHeight = 50; |
| 317 | 527 | |
| 318 | 528 | } else { // 从未请求到过数据 |
| 319 | 529 | if ([BHConfig boolValue:ChannelsRequested]&& first) { |
| 530 | + | |
| 531 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(classifyChannelsRequest:) name:CNWjjClassifyChannelsRequestStateNotifiName object:nil]; | |
| 532 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(classifyChannelsRequestedHideLoading:) name:CNWjjClassifyChannelsRequestHideLoadingNotifiName object:nil]; | |
| 320 | 533 | [QMUITips showLoadingInView:self.view]; |
| 321 | 534 | self.isLoading = YES; |
| 322 | 535 | return; |
| ... | ... | @@ -426,6 +639,16 @@ static CGFloat moveHeight = 50; |
| 426 | 639 | { |
| 427 | 640 | [self.statusBarColors addObject:@"1"]; |
| 428 | 641 | } |
| 642 | + if (!CNLiveStringIsEmpty(model.defaultPage) && [model.defaultPage isEqualToString:@"1"]) { | |
| 643 | + self.ld_currentIndex = [normalArray indexOfObject:dic]; | |
| 644 | + } | |
| 645 | + if ([model.pageType isEqualToString:@"2"] && self.isDSShopChanged) {//是电商中国且刷新过颜色 | |
| 646 | + NSInteger i = [normalArray indexOfObject:str]; | |
| 647 | + [self.bgColors replaceObjectAtIndex:i withObject:self.naviBackgroundColor]; | |
| 648 | + [self.statusBarColors replaceObjectAtIndex:i withObject:[NSString stringWithFormat:@"%lu",(unsigned long)self.statusState]]; | |
| 649 | + [self.textColors replaceObjectAtIndex:i withObject:CNLiveColorWithHexString(self.naviNormalTitleColor)]; | |
| 650 | + [self.textColorSeleteds replaceObjectAtIndex:i withObject:CNLiveColorWithHexString(self.naviSelectTitleColor)]; | |
| 651 | + } | |
| 429 | 652 | } |
| 430 | 653 | } |
| 431 | 654 | -(void)scrollViewUpDowm:(BOOL)isUp |
| ... | ... | @@ -437,12 +660,6 @@ static CGFloat moveHeight = 50; |
| 437 | 660 | { |
| 438 | 661 | [self scrollViewDown]; |
| 439 | 662 | } |
| 440 | - if ([CNUserShareManager isLogin]) { | |
| 441 | - self.customChannelsBtn.centerY = self.myCategoryView.collectionView.centerY + kStatusHeight; | |
| 442 | - }else | |
| 443 | - { | |
| 444 | - self.loginBtn.centerY = self.myCategoryView.collectionView.centerY+kStatusHeight; | |
| 445 | - } | |
| 446 | 663 | }]; |
| 447 | 664 | } |
| 448 | 665 | |
| ... | ... | @@ -454,6 +671,12 @@ static CGFloat moveHeight = 50; |
| 454 | 671 | self.topBgImg.top -= moveHeight; |
| 455 | 672 | self.myCategoryView.collectionView.top = -50-kStatusHeight; |
| 456 | 673 | self.pageViewController.view.top = kStatusHeight; |
| 674 | + if ([CNUserShareManager isLogin]) { | |
| 675 | + self.customChannelsBtn.centerY = self.myCategoryView.collectionView.centerY + kStatusHeight; | |
| 676 | + }else | |
| 677 | + { | |
| 678 | + self.loginBtn.centerY = self.myCategoryView.collectionView.centerY+kStatusHeight; | |
| 679 | + } | |
| 457 | 680 | } |
| 458 | 681 | -(void)scrollViewDown{ |
| 459 | 682 | if (self.topBgImg.top==0) { |
| ... | ... | @@ -463,7 +686,12 @@ static CGFloat moveHeight = 50; |
| 463 | 686 | self.topBgImg.top += moveHeight; |
| 464 | 687 | self.myCategoryView.collectionView.top = 0; |
| 465 | 688 | self.pageViewController.view.top = self.myCategoryView.bottom; |
| 466 | - | |
| 689 | + if ([CNUserShareManager isLogin]) { | |
| 690 | + self.customChannelsBtn.centerY = self.myCategoryView.centerY; | |
| 691 | + }else | |
| 692 | + { | |
| 693 | + self.loginBtn.centerY = self.myCategoryView.centerY; | |
| 694 | + } | |
| 467 | 695 | } |
| 468 | 696 | |
| 469 | 697 | -(void)managerScrollView:(BOOL)enabled |
| ... | ... | @@ -474,6 +702,33 @@ static CGFloat moveHeight = 50; |
| 474 | 702 | [subVc layoutRightSubViewWithShow:!enabled]; |
| 475 | 703 | } |
| 476 | 704 | } |
| 705 | +#pragma mark - | |
| 706 | +#pragma mark - CNSubClassifySegmentControllerDelegate | |
| 707 | +// 显示 目击者/监管/大众体育 首次使用引导页 | |
| 708 | +- (void)showGuideShadeViewWithType:(NSInteger)type cellFrame:(CGRect)cellFrame { | |
| 709 | + if (type==1) { | |
| 710 | + [CNWitnessShadeManager showWitnessShadeViewWithTopImg:@"mjz" contentImg:@"mjz-new-text" topImgRect:CGRectMake(cellFrame.origin.x-10, cellFrame.origin.y+10, 75, 30) contentImgSize:CGSizeMake(199, 68) vc:self cancelBlock:^{ | |
| 711 | + [BHConfig set:wjjIsShowWitnessShadeKey boolValue:nil]; | |
| 712 | + if (![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSupervisionShadeKey,CNUserShareModelUid]]) { | |
| 713 | + [CNSupervisionGuideViewManager showSupervisionGuideViewWithVC:self]; | |
| 714 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSupervisionShadeKey,CNUserShareModelUid]]; | |
| 715 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 716 | + } | |
| 717 | + }]; | |
| 718 | + [BHConfig set:wjjIsShowWitnessShadeKey boolValue:YES]; | |
| 719 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowWitnessShadeKey,CNUserShareModelUid]]; | |
| 720 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 721 | + } else if(type==2) { | |
| 722 | + [CNWitnessShadeManager showWitnessShadeViewWithTopImg:@"dzty" contentImg:@"dzty-text" topImgRect:CGRectMake(cellFrame.origin.x-10, cellFrame.origin.y+10, 102, 30) contentImgSize:CGSizeMake(276, 129) vc:self cancelBlock:nil]; | |
| 723 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSportShadeKey,CNUserShareModelUid]]; | |
| 724 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 725 | + } else if (type==3) { | |
| 726 | + [CNSupervisionGuideViewManager showSupervisionGuideViewWithVC:self]; | |
| 727 | + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSupervisionShadeKey,CNUserShareModelUid]]; | |
| 728 | + [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 729 | + } | |
| 730 | +} | |
| 731 | + | |
| 477 | 732 | #pragma mark - CNCustomChannelListViewDelegate !!!!!!!!!!!!!!!!!!!!!! |
| 478 | 733 | - (void)changeChannelsList |
| 479 | 734 | { |
| ... | ... | @@ -493,7 +748,43 @@ static CGFloat moveHeight = 50; |
| 493 | 748 | - (void)pushToControllerWithIndex:(NSInteger)index |
| 494 | 749 | { |
| 495 | 750 | // 跳到其他频道的对应页面 |
| 496 | -// [self goToOtherChannelViewControllerWithIndex:index]; | |
| 751 | + NSString *otherKey = [NSString stringWithFormat:@"%@_%@",OtherChannelArray,CNUserShareModel.uid]; | |
| 752 | + NSArray *otherArray = [[NSUserDefaults standardUserDefaults] objectForKey:otherKey]; | |
| 753 | + NSString *dataStr = [otherArray safetyObjectAtIndex:index]; | |
| 754 | + NSDictionary *dic = CNLiveStringJsonToDictionary(dataStr); | |
| 755 | + CNCategoryGetChannelModel *model = [CNCategoryGetChannelModel mj_objectWithKeyValues:dic]; | |
| 756 | + NSDictionary *paramDic = nil; | |
| 757 | + if (model.pageStyleList.count>0) { | |
| 758 | + paramDic = @{ | |
| 759 | + @"showName":model.showName?model.showName:@"", | |
| 760 | + @"backgroundColor":model.backgroundColor?model.backgroundColor:@"" | |
| 761 | + }; | |
| 762 | + }else if([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){ | |
| 763 | + paramDic= @{ | |
| 764 | + @"bgColor": model.backgroundColor?model.backgroundColor:@"", | |
| 765 | + @"channelId":model.channelId?model.channelId:@"", | |
| 766 | + @"channelName":model.id?model.id:@"", | |
| 767 | + @"pageId":model.pageId?model.pageId:@"", | |
| 768 | + }; | |
| 769 | + }else if ([model.pageType isEqualToString:@"2"]) {//电商中国 | |
| 770 | + paramDic = @{ | |
| 771 | + @"showName":model.showName?model.showName:@"" | |
| 772 | + }; | |
| 773 | + }else | |
| 774 | + { | |
| 775 | + BOOL isBlack = NO; | |
| 776 | + if (CNLiveStringIsEmpty(model.statusBarColor)) { | |
| 777 | + isBlack = YES; | |
| 778 | + } else { | |
| 779 | + isBlack = [model.statusBarColor boolValue];//1 黑色 | |
| 780 | + } | |
| 781 | + paramDic= @{ | |
| 782 | + @"title": model.showName?model.showName:@"", | |
| 783 | + @"isBlack":@(isBlack), | |
| 784 | + @"thirdUrl":model.thirdUrl?model.thirdUrl:@"" | |
| 785 | + }; | |
| 786 | + } | |
| 787 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushCustomVC pageType:model.pageType.integerValue param:paramDic]; | |
| 497 | 788 | } |
| 498 | 789 | |
| 499 | 790 | - (void)closeCustomChannelsView { |
| ... | ... | @@ -533,7 +824,46 @@ static CGFloat moveHeight = 50; |
| 533 | 824 | self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0); |
| 534 | 825 | [self updateSelectColors:index]; |
| 535 | 826 | [self configCategoryViewWithType:JXCategoryTitleImageType_OnlyImage selectIndex:index unselectIndex:index]; |
| 536 | - | |
| 827 | + CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.dataArray safetyObjectAtIndex:index]; | |
| 828 | + if (![CNUserShareManager isLogin]) { | |
| 829 | + [BHConfig set:ChannelsSelectFirst value:model.id]; | |
| 830 | + } | |
| 831 | + if (model.pageStyleList.count>0) { | |
| 832 | + CNLiveSubSegmentController *subVC = (CNLiveSubSegmentController *)self.controllersArr[index]; | |
| 833 | + if (subVC && [subVC respondsToSelector:@selector(refreshCurrentVCData)]) { | |
| 834 | + [subVC refreshCurrentVCData]; | |
| 835 | + } | |
| 836 | + BOOL witness = ![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowWitnessShadeKey,CNUserShareModelUid]]; | |
| 837 | + BOOL sport = ![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSportShadeKey,CNUserShareModelUid]]; | |
| 838 | + BOOL supervision = ![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSupervisionShadeKey,CNUserShareModelUid]]; | |
| 839 | + if (!self.contentLogin && (witness || sport || supervision) && [CNUserShareManager isLogin]) { | |
| 840 | + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | |
| 841 | + [subVC showGuideView]; | |
| 842 | + }); | |
| 843 | + } | |
| 844 | + self.contentLogin = NO; | |
| 845 | + }else{ | |
| 846 | + NSDictionary *paramDic = nil; | |
| 847 | + if ([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){ | |
| 848 | + paramDic= @{ | |
| 849 | + @"bgColor": model.backgroundColor?model.backgroundColor:@"", | |
| 850 | + @"backgroundImg": model.backgroundImg?model.backgroundImg:@"", | |
| 851 | + @"channelId":model.channelId?model.channelId:@"", | |
| 852 | + @"channelName":model.id?model.id:@"", | |
| 853 | + @"pageId":model.pageId?model.pageId:@"", | |
| 854 | + }; | |
| 855 | + } | |
| 856 | + NSTimeInterval time = 300; | |
| 857 | + if ([model.id isEqualToString:@"1"]) { | |
| 858 | + time = 60; | |
| 859 | + } | |
| 860 | + [CNLiveClassifyJumpBridge listViewRefreshWithVC:self.controllersArr[index] pageType:model.pageType.integerValue param:paramDic refreshTime:time]; | |
| 861 | + } | |
| 862 | + if (index != self.myCategoryView.selectedIndex) { | |
| 863 | + [[NSNotificationCenter defaultCenter] postNotificationName:WjjH5StopVideoPlayerNotification object:nil]; | |
| 864 | + [[NSNotificationCenter defaultCenter] postNotificationName:kDSHappinessPageControlScrollEnableNotification object:@(YES)]; | |
| 865 | + } | |
| 866 | +// [MobClick event:@"channel_click_top"]; | |
| 537 | 867 | } |
| 538 | 868 | #pragma mark - Public |
| 539 | 869 | -(JXCategoryBaseView *)preferredCategoryView | ... | ... |
CNLiveVideoClassifyKit/Classes/Controller/CNLiveSubSegmentController.h
| ... | ... | @@ -9,10 +9,18 @@ |
| 9 | 9 | @class CNCategoryGetChannelModel; |
| 10 | 10 | |
| 11 | 11 | NS_ASSUME_NONNULL_BEGIN |
| 12 | +@protocol CNSubClassifySegmentControllerDelegate <NSObject> | |
| 13 | +// 1/2/3 目击者/大众体/监管 | |
| 14 | +- (void)showGuideShadeViewWithType:(NSInteger)type cellFrame:(CGRect)cellFrame; | |
| 15 | + | |
| 16 | +@end | |
| 17 | + | |
| 12 | 18 | |
| 13 | 19 | @interface CNLiveSubSegmentController : CNCategoryBaseViewController |
| 14 | 20 | |
| 15 | 21 | @property (nonatomic, assign) BOOL isBlack; |
| 22 | +@property (nonatomic, assign) NSInteger selectChannelId; | |
| 23 | +@property (nonatomic, weak) id <CNSubClassifySegmentControllerDelegate>delegate; | |
| 16 | 24 | |
| 17 | 25 | -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model; |
| 18 | 26 | @property (nonatomic, copy) void (^scrollViewDidScrollBlock)(BOOL isUp); |
| ... | ... | @@ -20,6 +28,9 @@ NS_ASSUME_NONNULL_BEGIN |
| 20 | 28 | // 一级频道显示隐藏时二级频道右侧的搜索按钮变宽变窄控制 |
| 21 | 29 | - (void)layoutRightSubViewWithShow:(BOOL)show; |
| 22 | 30 | |
| 31 | +- (void)refreshCurrentVCData; | |
| 32 | +- (void)showGuideView; | |
| 33 | + | |
| 23 | 34 | @end |
| 24 | 35 | |
| 25 | 36 | NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Controller/CNLiveSubSegmentController.m
| ... | ... | @@ -7,25 +7,36 @@ |
| 7 | 7 | |
| 8 | 8 | #import "CNLiveSubSegmentController.h" |
| 9 | 9 | #import "CNCategoryGetChannelModel.h" |
| 10 | +#import "CNAudioPlayProgressView.h" | |
| 10 | 11 | #import "CNLiveListManager.h" |
| 11 | 12 | |
| 12 | 13 | @interface CNLiveSubSegmentController () |
| 13 | 14 | @property (nonatomic, strong)JXCategoryTitleView *myCategoryView; |
| 14 | 15 | @property (nonatomic, strong) QMUIButton *searchBtn; |
| 16 | +@property (nonatomic, strong) UIButton *moreBtn; | |
| 17 | +@property (nonatomic, strong) UIImageView *bgImgView;//背景图 | |
| 18 | +@property (nonatomic, strong) CNAudioPlayProgressView *progressView;//听见中国二级频道当前播放音乐的进度 | |
| 19 | +@property (nonatomic, strong) UIButton *playingBtn;//听见中国二级频道当前播放音乐按钮 | |
| 20 | +@property (nonatomic, strong) UIImageView *playingImgV;//听见中国二级频道当前播放音乐背景图 | |
| 21 | +@property (nonatomic, strong) UIImageView *playTipImgV;//听见中国二级频道当前播放tip | |
| 22 | +@property (nonatomic, strong) UIButton *historyBtn;//历史记录 | |
| 23 | +@property (nonatomic, strong) UIButton *downloadingBtn;//听见中国下载按钮 | |
| 24 | + | |
| 15 | 25 | |
| 16 | 26 | @property (nonatomic, strong)NSArray<CNCategoryGetChannelModel*> *pageListArr; |
| 17 | 27 | @property (nonatomic, strong)UIColor *textColor; |
| 18 | 28 | @property (nonatomic, strong)NSString *backgroundColor; |
| 19 | 29 | @property (nonatomic, strong)NSString *backImage; |
| 20 | 30 | @property (nonatomic, strong)NSString *backImageH5; |
| 31 | +@property (nonatomic, strong)NSString *channelId; | |
| 21 | 32 | |
| 22 | 33 | |
| 23 | 34 | @end |
| 24 | 35 | |
| 25 | 36 | @implementation CNLiveSubSegmentController |
| 26 | --(void)dealloc | |
| 27 | -{ | |
| 28 | - | |
| 37 | +- (void)dealloc { | |
| 38 | + [[NSNotificationCenter defaultCenter] removeObserver:self]; | |
| 39 | + | |
| 29 | 40 | } |
| 30 | 41 | -(instancetype)initWithModel:(CNCategoryGetChannelModel *)model |
| 31 | 42 | { |
| ... | ... | @@ -46,13 +57,41 @@ |
| 46 | 57 | } |
| 47 | 58 | self.backImageH5 = model.backgroundImgH5; |
| 48 | 59 | self.backImage = model.backgroundImg; |
| 60 | + self.channelId = model.id; | |
| 49 | 61 | |
| 62 | + self.ld_currentIndex = 0; | |
| 63 | + self.selectChannelId = -1; | |
| 50 | 64 | } |
| 51 | 65 | return self; |
| 52 | 66 | } |
| 53 | 67 | |
| 54 | 68 | - (void)viewDidLoad { |
| 55 | 69 | [super viewDidLoad]; |
| 70 | + | |
| 71 | + if (!CNLiveStringIsEmpty(self.backImageH5)) { | |
| 72 | + // 如果后台传了背景图 就设置背景图 | |
| 73 | + [self.view addSubview:self.bgImgView]; | |
| 74 | + [self.view sendSubviewToBack:self.bgImgView]; | |
| 75 | + weakself | |
| 76 | + [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { | |
| 77 | + if (image) { | |
| 78 | + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; | |
| 79 | + } | |
| 80 | + }]; | |
| 81 | + } | |
| 82 | + if (self.selectChannelId != -1) { | |
| 83 | + NSString *classifyId = [BHConfig get:ChannelsSelectSecond]; | |
| 84 | + [BHConfig set:ChannelsSelectSecond value:nil]; | |
| 85 | + if (!CNLiveStringIsEmpty(classifyId)) { | |
| 86 | + NSInteger selectChannelId = [self containsWithChannelIndex:self.selectChannelId classifyId:classifyId]; | |
| 87 | + if(selectChannelId == -1){ | |
| 88 | + //我的频道中没有这个频道 | |
| 89 | + } else { | |
| 90 | + self.myCategoryView.defaultSelectedIndex = selectChannelId; | |
| 91 | + self.ld_currentIndex = selectChannelId; | |
| 92 | + } | |
| 93 | + } | |
| 94 | + } | |
| 56 | 95 | [self handleDateWithChannelsArray]; |
| 57 | 96 | // 添加二级频道右侧的搜索按钮 |
| 58 | 97 | [self.view addSubview:self.searchBtn]; |
| ... | ... | @@ -86,24 +125,166 @@ |
| 86 | 125 | [self.controllersArr addObject:listVC]; |
| 87 | 126 | } |
| 88 | 127 | [self addTheFirstPage]; |
| 128 | + | |
| 129 | + if ([self.channelId isEqualToString:@"219"]) { | |
| 130 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingStatus:) name:WjjAudioPlayerStatusNotification object:nil]; | |
| 131 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlayingSchedule:) name:WjjAudioPlayerScheduleNotification object:nil]; | |
| 132 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayFinishedUpdateSchedule:) name:WjjAudioPlayDidFinishNotification object:nil]; | |
| 133 | + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayUpdateInfo:) name:WjjAudioPlayerWhichPlayingNotification object:nil]; | |
| 134 | + | |
| 135 | + [self.view addSubview:self.moreBtn]; | |
| 136 | + [self.view addSubview:self.progressView]; | |
| 137 | + [self.progressView addSubview:self.playingImgV]; | |
| 138 | + [self.playingImgV addSubview:self.playTipImgV]; | |
| 139 | + [self.progressView addSubview:self.playingBtn]; | |
| 140 | + YYCache * yyCache = [YYCache cacheWithName:[NSString stringWithFormat:@"CNLastPlayedAudio_%@",CNUserShareModel.uid]]; | |
| 141 | + CNLiveAlbumAudioListModel *model = (CNLiveAlbumAudioListModel *)[yyCache objectForKey:[NSString stringWithFormat:@"%@_%@",wjjLastAudioInfoSaveKey,CNUserShareModel.uid]]; | |
| 142 | + if (model) { | |
| 143 | + if (model && !CNLiveStringIsEmpty(model.activityId)) { | |
| 144 | + self.playingBtn.userInteractionEnabled = YES; | |
| 145 | + self.progressView.hidden = NO; | |
| 146 | + } else { | |
| 147 | + self.playingBtn.userInteractionEnabled = NO; | |
| 148 | + self.progressView.hidden = YES; | |
| 149 | + } | |
| 150 | + if (model && (!CNLiveStringIsEmpty(model.img) || !CNLiveStringIsEmpty(model.poster) || !CNLiveStringIsEmpty(model.albumImg)) ) { | |
| 151 | + [self.playingImgV sd_setImageWithURL:[NSURL URLWithString:model.img?[model.img stringByRemovingPercentEncoding]:(model.poster?[model.poster stringByRemovingPercentEncoding]:[model.albumImg stringByRemovingPercentEncoding])] placeholderImage:[UIImage loadBundleImage:@""]]; | |
| 152 | + } else { | |
| 153 | + self.playingImgV.image = nil; | |
| 154 | + } | |
| 155 | + | |
| 156 | + if ([CNLiveClassifyJumpBridge audioPlayerIsplaying]) { | |
| 157 | + self.playTipImgV.hidden = YES; | |
| 158 | + [self playingStartAnimating]; | |
| 159 | + } else { | |
| 160 | + self.playTipImgV.hidden = NO; | |
| 161 | + [self playingStopAnimating]; | |
| 162 | + } | |
| 163 | + } | |
| 164 | + }else if ([self.channelId isEqualToString:@"11"]) { | |
| 165 | + // 美食中国 历史记录 | |
| 166 | + [self.view addSubview:self.historyBtn]; | |
| 167 | + } | |
| 89 | 168 | // Do any additional setup after loading the view. |
| 90 | 169 | } |
| 91 | 170 | -(void)viewDidLayoutSubviews |
| 92 | 171 | { |
| 93 | 172 | [super viewDidLayoutSubviews]; |
| 94 | - self.searchBtn.right = KScreenWidth-12; | |
| 95 | - self.searchBtn.centerY = self.myCategoryView.height/2; | |
| 96 | 173 | self.myCategoryView.top = 0; |
| 97 | - self.myCategoryView.width = self.searchBtn.left; | |
| 98 | 174 | self.pageViewController.view.frame = CGRectMake(0, self.myCategoryView.bottom+10, kScreenWidth, self.view.bounds.size.height - self.myCategoryView.bottom); |
| 175 | + self.searchBtn.right = KScreenWidth-12; | |
| 176 | + CGFloat width = self.searchBtn.left; | |
| 177 | + self.searchBtn.centerY = self.myCategoryView.height/2; | |
| 178 | + if ([self.channelId isEqualToString:@"219"]) { | |
| 179 | + self.moreBtn.right = KScreenWidth-12-66-15; | |
| 180 | + self.moreBtn.centerY = self.myCategoryView.height/2; | |
| 181 | + self.progressView.right = KScreenWidth-93-18-15; | |
| 182 | + self.progressView.centerY = self.myCategoryView.height/2; | |
| 183 | + width = self.progressView.left; | |
| 184 | + }else if ([self.channelId isEqualToString:@"11"]){ | |
| 185 | + self.historyBtn.right = KScreenWidth-93; | |
| 186 | + self.historyBtn.centerY = self.myCategoryView.height/2; | |
| 187 | + width = self.historyBtn.left; | |
| 188 | + } | |
| 189 | + self.myCategoryView.width = width; | |
| 190 | +} | |
| 191 | +#pragma mark - Notification | |
| 192 | +- (void)updatePlayingStatus:(NSNotification *)notifi { | |
| 193 | + | |
| 194 | + NSInteger status = [[notifi.userInfo objectForKey:@"Status"] integerValue];//1播放 0暂停 | |
| 195 | + if (status == 1) { | |
| 196 | + self.playTipImgV.hidden = YES; | |
| 197 | + [self playingStartAnimating]; | |
| 198 | + }else { | |
| 199 | + self.playTipImgV.hidden = NO; | |
| 200 | + [self playingStopAnimating]; | |
| 201 | + } | |
| 202 | +} | |
| 203 | +- (void)updatePlayingSchedule:(NSNotification *)notifi { | |
| 204 | + | |
| 205 | + NSDictionary *dic = notifi.userInfo; | |
| 206 | + [self.progressView animationWithProgres:[[dic objectForKey:@"schedule"] floatValue] duration:0.8]; | |
| 207 | +} | |
| 208 | +// 通知方法 更新当前播放音乐完成时的进度 | |
| 209 | +- (void)audioPlayFinishedUpdateSchedule:(NSNotification *)notifi { | |
| 210 | + | |
| 211 | + [self.progressView animationWithProgres:0.0f duration:0.0f]; | |
| 212 | +} | |
| 213 | +// 通知方法 切换音乐时的显示 | |
| 214 | +- (void)audioPlayUpdateInfo:(NSNotification *)notifi { | |
| 215 | + | |
| 216 | + CNLiveAlbumAudioListModel *model = notifi.object; | |
| 217 | + if (model && !CNLiveStringIsEmpty(model.activityId)) { | |
| 218 | + self.playingBtn.userInteractionEnabled = YES; | |
| 219 | + self.progressView.hidden = NO; | |
| 220 | + } else { | |
| 221 | + self.playingBtn.userInteractionEnabled = NO; | |
| 222 | + self.progressView.hidden = YES; | |
| 223 | + } | |
| 224 | + if (model && (!CNLiveStringIsEmpty(model.img) || !CNLiveStringIsEmpty(model.poster) || !CNLiveStringIsEmpty(model.albumImg)) ) { | |
| 225 | + [self.playingImgV sd_setImageWithURL:[NSURL URLWithString:model.img?[model.img stringByRemovingPercentEncoding]:(model.poster?[model.poster stringByRemovingPercentEncoding]:[model.albumImg stringByRemovingPercentEncoding])] placeholderImage:[UIImage loadBundleImage:@""]]; | |
| 226 | + } else { | |
| 227 | + self.playingImgV.image = nil; | |
| 228 | + } | |
| 99 | 229 | } |
| 100 | 230 | #pragma mark - Method |
| 231 | + | |
| 232 | +// 开始当前播放音乐转动动画 | |
| 233 | +- (void)playingStartAnimating { | |
| 234 | + | |
| 235 | + CABasicAnimation *rotationAnimation; | |
| 236 | + rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; | |
| 237 | + rotationAnimation.fromValue = @0; | |
| 238 | + rotationAnimation.toValue = @(M_PI * 2); | |
| 239 | + rotationAnimation.duration = 5.0; | |
| 240 | + rotationAnimation.repeatCount = HUGE; | |
| 241 | + rotationAnimation.removedOnCompletion = NO; | |
| 242 | + [self.playingImgV.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; | |
| 243 | + | |
| 244 | +} | |
| 245 | +// 停止当前播放音乐转动动画 | |
| 246 | +- (void)playingStopAnimating { | |
| 247 | + | |
| 248 | + [self.playingImgV.layer removeAllAnimations];//停止动画 | |
| 249 | +} | |
| 250 | +// 判断我的频道中是否包含参数中的一级频道中的二级频道(偏移前的判断) | |
| 251 | +- (NSInteger)containsWithChannelIndex:(NSInteger)index classifyId:(NSString *)classifyId { | |
| 252 | + NSString *normalKey = [NSString stringWithFormat:@"%@_%@",NormalChannelArray,CNUserShareModel.uid]; | |
| 253 | + NSMutableArray *channelArray = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:normalKey]]; | |
| 254 | + NSInteger i = 0; | |
| 255 | + | |
| 256 | + if(channelArray.count > index){ | |
| 257 | + NSString *modelStr = channelArray[index]; | |
| 258 | + NSDictionary *dic = CNLiveStringJsonToDictionary(modelStr); | |
| 259 | + CNCategoryGetChannelModel *model = [CNCategoryGetChannelModel mj_objectWithKeyValues:dic]; | |
| 260 | + for (CNCategoryGetChannelModel *subModel in model.pageStyleList) { | |
| 261 | + if ([subModel.id isEqualToString:classifyId]) { | |
| 262 | + return i; | |
| 263 | + } | |
| 264 | + if (CNLiveStringIsEmpty(subModel.pageType)) { | |
| 265 | + continue; | |
| 266 | + }else{ | |
| 267 | + i++; | |
| 268 | + } | |
| 269 | + } | |
| 270 | + } | |
| 271 | + return -1; | |
| 272 | + | |
| 273 | +} | |
| 101 | 274 | -(void)handleDateWithChannelsArray{ |
| 102 | 275 | [self.titles removeAllObjects]; |
| 103 | - | |
| 276 | + NSMutableArray *array = [NSMutableArray array]; | |
| 104 | 277 | for (CNCategoryGetChannelModel *model in self.pageListArr) { |
| 105 | - [self.titles addObject:model.name]; | |
| 278 | + if (!CNLiveStringIsEmpty(model.showName) && !CNLiveStringIsEmpty(model.pageType)) { | |
| 279 | + [self.titles addObject:model.name]; | |
| 280 | + [array addObject:model]; | |
| 281 | + if (!CNLiveStringIsEmpty(model.defaultPage) && [model.defaultPage isEqualToString:@"1"]) { | |
| 282 | + self.myCategoryView.defaultSelectedIndex = [self.pageListArr indexOfObject:model]; | |
| 283 | + self.ld_currentIndex = [self.pageListArr indexOfObject:model]; | |
| 284 | + } | |
| 285 | + } | |
| 106 | 286 | } |
| 287 | + self.pageListArr = array.copy; | |
| 107 | 288 | } |
| 108 | 289 | // 一级频道显示隐藏时二级频道右侧的搜索按钮变宽变窄控制 |
| 109 | 290 | - (void)layoutRightSubViewWithShow:(BOOL)show { |
| ... | ... | @@ -114,15 +295,17 @@ |
| 114 | 295 | self.searchBtn.width = 66; |
| 115 | 296 | self.searchBtn.right = KScreenWidth-12; |
| 116 | 297 | [self.searchBtn setTitle:@"搜索" forState:UIControlStateNormal]; |
| 298 | + CGFloat width = self.searchBtn.left; | |
| 299 | + if ([self.channelId isEqualToString:@"219"]) { | |
| 300 | + self.moreBtn.right = KScreenWidth-12-66-15; | |
| 301 | + self.progressView.right = KScreenWidth-93-18-15; | |
| 302 | + width = self.progressView.left; | |
| 303 | + } else if ([self.channelId isEqualToString:@"11"]) { | |
| 304 | + self.historyBtn.right = KScreenWidth-93; | |
| 305 | + width = self.historyBtn.left; | |
| 306 | + } | |
| 117 | 307 | |
| 118 | -// if ([self.channelModel.id isEqualToString:@"219"]) { | |
| 119 | -// self.moreBtn.right = KScreenWidth-12-66-15; | |
| 120 | -// self.progressView.right = KScreenWidth-93-18-15; | |
| 121 | -// } else if ([self.channelModel.id isEqualToString:@"11"]) { | |
| 122 | -// self.historyBtn.right = KScreenWidth-93; | |
| 123 | -// } | |
| 124 | - | |
| 125 | - self.myCategoryView.width = self.searchBtn.left; | |
| 308 | + self.myCategoryView.width = width; | |
| 126 | 309 | } else { |
| 127 | 310 | // 变窄 |
| 128 | 311 | |
| ... | ... | @@ -130,16 +313,167 @@ |
| 130 | 313 | self.searchBtn.right = KScreenWidth-12; |
| 131 | 314 | [self.searchBtn setTitle:nil forState:UIControlStateNormal]; |
| 132 | 315 | |
| 133 | -// if ([self.channelModel.id isEqualToString:@"219"]) { | |
| 134 | -// self.moreBtn.right = KScreenWidth-12-66-15+30; | |
| 135 | -// self.progressView.right = KScreenWidth-93-18-15+30; | |
| 136 | -// } else if ([self.channelModel.id isEqualToString:@"11"]) { | |
| 137 | -// self.historyBtn.right = KScreenWidth-93+30; | |
| 138 | -// } | |
| 316 | + if ([self.channelId isEqualToString:@"219"]) { | |
| 317 | + self.moreBtn.right = KScreenWidth-12-66-15+30; | |
| 318 | + self.progressView.right = KScreenWidth-93-18-15+30; | |
| 319 | + } else if ([self.channelId isEqualToString:@"11"]) { | |
| 320 | + self.historyBtn.right = KScreenWidth-93+30; | |
| 321 | + } | |
| 139 | 322 | self.myCategoryView.width = self.searchBtn.left; |
| 140 | 323 | } |
| 141 | 324 | } |
| 142 | 325 | |
| 326 | +-(void)refreshCurrentVCData | |
| 327 | +{ | |
| 328 | + weakself | |
| 329 | + [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { | |
| 330 | + if (image) { | |
| 331 | + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; | |
| 332 | + } | |
| 333 | + }]; | |
| 334 | + CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.pageListArr safetyObjectAtIndex:self.ld_currentIndex]; | |
| 335 | + if (![CNUserShareManager isLogin]) { | |
| 336 | + [BHConfig set:ChannelsSelectSecond value:self.channelId]; | |
| 337 | + } | |
| 338 | + NSDictionary *paramDic = nil; | |
| 339 | + if ([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){ | |
| 340 | + paramDic= @{ | |
| 341 | + @"bgColor": model.backgroundColor?model.backgroundColor:@"", | |
| 342 | + @"backgroundImg": model.backgroundImg?model.backgroundImg:@"", | |
| 343 | + @"channelId":model.channelId?model.channelId:@"", | |
| 344 | + @"channelName":model.id?model.id:@"", | |
| 345 | + @"pageId":model.pageId?model.pageId:@"", | |
| 346 | + }; | |
| 347 | + } | |
| 348 | + NSTimeInterval time = 300; | |
| 349 | + if ([model.id isEqualToString:@"1"]) { | |
| 350 | + time = 60; | |
| 351 | + } | |
| 352 | + [CNLiveClassifyJumpBridge listViewRefreshWithVC:self.controllersArr[self.ld_currentIndex] pageType:model.pageType.integerValue param:paramDic refreshTime:time]; | |
| 353 | +} | |
| 354 | +-(void)showGuideView | |
| 355 | +{ | |
| 356 | + if (![CNUserShareManager isLogin] || [BHConfig boolValue:wjjIsShowWitnessShadeKey]) { | |
| 357 | + return; | |
| 358 | + } | |
| 359 | + CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.pageListArr safetyObjectAtIndex:self.ld_currentIndex]; | |
| 360 | + if (![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowWitnessShadeKey,CNUserShareModelUid]]) { | |
| 361 | + [self showWitnessShadeViewWithModel:model]; | |
| 362 | + } else if (![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSupervisionShadeKey,CNUserShareModelUid]]) { | |
| 363 | + [self showSupervisionViewWithModel:model]; | |
| 364 | + } | |
| 365 | + if (![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@_%@",wjjIsShowSportShadeKey,CNUserShareModelUid]]) { | |
| 366 | + [self showSportShadeViewWithModel:model]; | |
| 367 | + } | |
| 368 | + | |
| 369 | +} | |
| 370 | +- (void)showWitnessShadeViewWithModel:(CNCategoryGetChannelModel *)model { | |
| 371 | + if (![CNUserShareManager isLogin]) { | |
| 372 | + return; | |
| 373 | + } | |
| 374 | + if (model && [model.id isEqualToString:@"101"]) { | |
| 375 | + | |
| 376 | + UICollectionViewLayoutAttributes * att = [self.myCategoryView.collectionView layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForRow:self.ld_currentIndex inSection:0]]; | |
| 377 | + CGRect cellRect = att.frame; | |
| 378 | + CGRect cellFrame = [self.myCategoryView.collectionView convertRect:cellRect toView:AppKeyWindow]; | |
| 379 | + | |
| 380 | + if (self.delegate && [self.delegate respondsToSelector:@selector(showGuideShadeViewWithType:cellFrame:)]) { | |
| 381 | + [self.delegate showGuideShadeViewWithType:1 cellFrame:cellFrame]; | |
| 382 | + } | |
| 383 | + } | |
| 384 | + | |
| 385 | +} | |
| 386 | +// 显示目击者中监管首次显示引导图 | |
| 387 | +- (void)showSupervisionViewWithModel:(CNCategoryGetChannelModel *)model { | |
| 388 | + | |
| 389 | + if (![CNUserShareManager isLogin]) { | |
| 390 | + return; | |
| 391 | + } | |
| 392 | + if (model && [model.id isEqualToString:@"101"]) { | |
| 393 | + if (self.delegate && [self.delegate respondsToSelector:@selector(showGuideShadeViewWithType:cellFrame:)]) { | |
| 394 | + [self.delegate showGuideShadeViewWithType:3 cellFrame:CGRectZero]; | |
| 395 | + } | |
| 396 | + } | |
| 397 | + | |
| 398 | +} | |
| 399 | +// 显示大众体育首次使用引导图 | |
| 400 | +- (void)showSportShadeViewWithModel:(CNCategoryGetChannelModel *)model { | |
| 401 | + if (![CNUserShareManager isLogin]) { | |
| 402 | + return; | |
| 403 | + } | |
| 404 | + if (model && ([model.id isEqualToString:@"223"] || [model.id isEqualToString:@"801"])) {//大众体育 | |
| 405 | + | |
| 406 | + UICollectionViewLayoutAttributes * att = [self.myCategoryView.collectionView layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForRow:self.ld_currentIndex inSection:0]]; | |
| 407 | + CGRect cellRect = att.frame; | |
| 408 | + CGRect cellFrame = [self.myCategoryView.collectionView convertRect:cellRect toView:AppKeyWindow]; | |
| 409 | + | |
| 410 | + if (self.delegate && [self.delegate respondsToSelector:@selector(showGuideShadeViewWithType:cellFrame:)]) { | |
| 411 | + [self.delegate showGuideShadeViewWithType:2 cellFrame:cellFrame]; | |
| 412 | + } | |
| 413 | + } | |
| 414 | +} | |
| 415 | +#pragma mark - Action !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| 416 | +#pragma mark - TODO 正在播放 | |
| 417 | +- (void)playingAction:(UIButton *)sender { | |
| 418 | + | |
| 419 | + YYCache * yyCache = [YYCache cacheWithName:[NSString stringWithFormat:@"CNLastPlayedAudio_%@",CNUserShareModel.uid]]; | |
| 420 | + CNLiveAlbumAudioListModel *model = (CNLiveAlbumAudioListModel *)[yyCache objectForKey:[NSString stringWithFormat:@"%@_%@",wjjLastAudioInfoSaveKey,CNUserShareModel.uid]]; | |
| 421 | + if (model && model.activityId) { | |
| 422 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushAudioPlayerVC]; | |
| 423 | + } | |
| 424 | + | |
| 425 | +} | |
| 426 | +#pragma mark - TODO 历史 | |
| 427 | +- (void)historyAction:(UIButton *)sender { | |
| 428 | + if (![CNUserShareManager isLogin]) { | |
| 429 | + [BHConfig set:LoginPrepositionUrl value:@""]; | |
| 430 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushLoginVC]; | |
| 431 | + return; | |
| 432 | + } | |
| 433 | + if ([self.channelId isEqualToString:@"11"]){ | |
| 434 | + //美食中国历史 | |
| 435 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushHistoryVC]; | |
| 436 | + | |
| 437 | + }else if ([self.channelId isEqualToString:@"219"]) { | |
| 438 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushRecordVC]; | |
| 439 | + } | |
| 440 | +} | |
| 441 | +#pragma mark - TODO 下载中... | |
| 442 | +- (void)loadingAction:(UIButton *)sender { | |
| 443 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushDownloadVC]; | |
| 444 | +} | |
| 445 | +#pragma mark - TODO 搜索 | |
| 446 | +- (void)searchAction:(UIButton *)sender { | |
| 447 | +// [MobClick event:@"channel_click_search"]; | |
| 448 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushSearchVC]; | |
| 449 | +} | |
| 450 | + | |
| 451 | +#pragma mark - TODO 听见中国-更多 | |
| 452 | +- (void)moreAction:(UIButton *)sender event:(UIEvent *)event{ | |
| 453 | + if (![CNUserShareManager isLogin]) { | |
| 454 | + [BHConfig set:LoginPrepositionUrl value:@""]; | |
| 455 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushLoginVC]; | |
| 456 | + return; | |
| 457 | + } | |
| 458 | + [CNLiveClassifyJumpBridge popOverShowEvent:event imageDone:^(NSInteger selectIndex) { | |
| 459 | + if (selectIndex == 0) { | |
| 460 | + // 下载中 | |
| 461 | + [self loadingAction:self.downloadingBtn]; | |
| 462 | + } else if (selectIndex == 1) { | |
| 463 | + // 历史记录 | |
| 464 | + [self historyAction:self.historyBtn]; | |
| 465 | + } else if (selectIndex == 2) { | |
| 466 | + // 我的设备 | |
| 467 | + | |
| 468 | +#pragma mark - TODO:皮肤测试 | |
| 469 | + [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:self pushType:CNLiveClassifyJumpPushAddDiviceVC]; | |
| 470 | + | |
| 471 | + } | |
| 472 | + } dismissBlock:^{ | |
| 473 | + NSLog(@"dismiss"); | |
| 474 | + }]; | |
| 475 | + | |
| 476 | +} | |
| 143 | 477 | #pragma mark - Public |
| 144 | 478 | -(JXCategoryTitleView *)preferredCategoryView{ |
| 145 | 479 | return [[JXCategoryTitleView alloc] init]; |
| ... | ... | @@ -157,16 +491,109 @@ |
| 157 | 491 | [self.pageViewController setViewControllers:@[vc] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; |
| 158 | 492 | }else |
| 159 | 493 | { |
| 494 | + self.ld_currentIndex = index; | |
| 495 | + if (index != self.myCategoryView.selectedIndex) { | |
| 496 | + [[NSNotificationCenter defaultCenter] postNotificationName:WjjH5StopVideoPlayerNotification object:nil]; | |
| 497 | + [[NSNotificationCenter defaultCenter] postNotificationName:kDSHappinessPageControlScrollEnableNotification object:@(YES)]; | |
| 498 | + } | |
| 160 | 499 | [self.pageViewController setViewControllers:@[vc] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL]; |
| 500 | + CNCategoryGetChannelModel *model = (CNCategoryGetChannelModel *)[self.pageListArr safetyObjectAtIndex:index]; | |
| 501 | + if (![CNUserShareManager isLogin]) { | |
| 502 | + [BHConfig set:ChannelsSelectSecond value:model.id]; | |
| 503 | + } | |
| 504 | + NSDictionary *paramDic = nil; | |
| 505 | + if ([model.pageType isEqualToString:@"4"] || [model.pageType isEqualToString:@"5"]){ | |
| 506 | + paramDic= @{ | |
| 507 | + @"bgColor": model.backgroundColor?model.backgroundColor:@"", | |
| 508 | + @"backgroundImg": model.backgroundImg?model.backgroundImg:@"", | |
| 509 | + @"channelId":model.channelId?model.channelId:@"", | |
| 510 | + @"channelName":model.id?model.id:@"", | |
| 511 | + @"pageId":model.pageId?model.pageId:@"", | |
| 512 | + }; | |
| 513 | + } | |
| 514 | + NSTimeInterval time = 300; | |
| 515 | + if ([model.id isEqualToString:@"1"]) { | |
| 516 | + time = 60; | |
| 517 | + } | |
| 518 | + [CNLiveClassifyJumpBridge listViewRefreshWithVC:self.controllersArr[index] pageType:model.pageType.integerValue param:paramDic refreshTime:time]; | |
| 519 | + [self showGuideView]; | |
| 520 | + weakself | |
| 521 | + [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:self.backImageH5] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { | |
| 522 | + if (image) { | |
| 523 | + weakSelf.bgImgView.height = KScreenWidth*image.size.height/image.size.width; | |
| 524 | + } | |
| 525 | + }]; | |
| 161 | 526 | } |
| 162 | - | |
| 163 | 527 | } |
| 164 | 528 | #pragma mark - Getting&&Setting |
| 165 | 529 | -(JXCategoryTitleView *)myCategoryView |
| 166 | 530 | { |
| 167 | 531 | return (JXCategoryTitleView *)self.categoryView; |
| 168 | 532 | } |
| 533 | +- (UIImageView *)bgImgView { | |
| 534 | + if (!_bgImgView) { | |
| 535 | + _bgImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, KScreenWidth, self.view.height-50)]; | |
| 536 | + _bgImgView.backgroundColor = kWhiteColor; | |
| 537 | + } | |
| 538 | + return _bgImgView; | |
| 539 | + | |
| 540 | +} | |
| 541 | +- (UIButton *)historyBtn { | |
| 542 | + if (!_historyBtn) { | |
| 543 | + _historyBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 19, 19)]; | |
| 544 | + [_historyBtn setBackgroundImage:[UIImage loadBundleImage:@"listen_historey"] forState:UIControlStateNormal]; | |
| 545 | + [_historyBtn addTarget:self action:@selector(historyAction:) forControlEvents:UIControlEventTouchUpInside]; | |
| 546 | + _historyBtn.touchAreaInsets = UIEdgeInsetsMake(9, 9, 9, 9); | |
| 547 | + | |
| 548 | + } | |
| 549 | + return _historyBtn; | |
| 550 | +} | |
| 551 | +- (UIButton *)downloadingBtn { | |
| 552 | + if (!_downloadingBtn) { | |
| 553 | + _downloadingBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 21, 19)]; | |
| 554 | + [_downloadingBtn setBackgroundImage:[UIImage loadBundleImage:@"listen_historey"] forState:UIControlStateNormal]; | |
| 555 | + [_downloadingBtn addTarget:self action:@selector(loadingAction:) forControlEvents:UIControlEventTouchUpInside]; | |
| 556 | + _downloadingBtn.touchAreaInsets = UIEdgeInsetsMake(9, 9, 9, 9); | |
| 557 | + } | |
| 558 | + return _downloadingBtn; | |
| 559 | +} | |
| 560 | +- (CNAudioPlayProgressView *)progressView { | |
| 561 | + if (!_progressView) { | |
| 562 | + _progressView = [[CNAudioPlayProgressView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; | |
| 563 | + _progressView.backgroundColor = CNLiveColorWithHexString(@"#5CBFB1"); | |
| 564 | + _progressView.layer.cornerRadius = 20; | |
| 565 | + _progressView.layer.masksToBounds = YES; | |
| 566 | + _progressView.hidden = YES; | |
| 567 | + } | |
| 568 | + return _progressView; | |
| 569 | +} | |
| 570 | +- (UIButton *)playingBtn { | |
| 571 | + if (!_playingBtn) { | |
| 572 | + _playingBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; | |
| 573 | + [_playingBtn addTarget:self action:@selector(playingAction:) forControlEvents:UIControlEventTouchUpInside]; | |
| 574 | + _playingBtn.userInteractionEnabled = NO; | |
| 575 | + } | |
| 576 | + return _playingBtn; | |
| 577 | +} | |
| 169 | 578 | |
| 579 | +- (UIImageView *)playingImgV { | |
| 580 | + if (!_playingImgV) { | |
| 581 | + _playingImgV = [[UIImageView alloc]initWithFrame:CGRectMake(2, 2, 36, 36)]; | |
| 582 | + _playingImgV.image = [UIImage loadBundleImage:@""]; | |
| 583 | + _playingImgV.backgroundColor = RGBA(255, 169, 82, 1); | |
| 584 | + _playingImgV.layer.cornerRadius = 18; | |
| 585 | + _playingImgV.layer.masksToBounds = YES; | |
| 586 | + } | |
| 587 | + return _playingImgV; | |
| 588 | +} | |
| 589 | + | |
| 590 | +- (UIImageView *)playTipImgV { | |
| 591 | + if (!_playTipImgV) { | |
| 592 | + _playTipImgV = [[UIImageView alloc]initWithFrame:CGRectMake(13, 12, 10, 12)]; | |
| 593 | + _playTipImgV.image = [UIImage loadBundleImage:@"playBtn"]; | |
| 594 | + } | |
| 595 | + return _playTipImgV; | |
| 596 | +} | |
| 170 | 597 | - (QMUIButton *)searchBtn { |
| 171 | 598 | if (!_searchBtn) { |
| 172 | 599 | _searchBtn = [QMUIButton buttonWithType:UIButtonTypeCustom]; |
| ... | ... | @@ -191,7 +618,16 @@ |
| 191 | 618 | } |
| 192 | 619 | return _searchBtn; |
| 193 | 620 | } |
| 194 | - | |
| 621 | +- (UIButton *)moreBtn { | |
| 622 | + if (!_moreBtn) { | |
| 623 | + _moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
| 624 | + _moreBtn.frame = CGRectMake(0, 0, 18, 44); | |
| 625 | + [_moreBtn setImage:[UIImage loadBundleImage:@"ClassifyMore"] forState:UIControlStateNormal]; | |
| 626 | + [_moreBtn addTarget:self action:@selector(moreAction:event:) forControlEvents:UIControlEventTouchUpInside]; | |
| 627 | + _moreBtn.touchAreaInsets = UIEdgeInsetsMake(9, 9, 9, 9); | |
| 628 | + } | |
| 629 | + return _moreBtn; | |
| 630 | +} | |
| 195 | 631 | /* |
| 196 | 632 | #pragma mark - Navigation |
| 197 | 633 | ... | ... |
CNLiveVideoClassifyKit/Classes/Header/CNLiveCommonDefines.h
| ... | ... | @@ -8,9 +8,41 @@ |
| 8 | 8 | #ifndef CNLiveCommonDefines_h |
| 9 | 9 | #define CNLiveCommonDefines_h |
| 10 | 10 | |
| 11 | -//#ifndef CNTouristsId | |
| 12 | -//#define CNTouristsId @"100056" //游客Id | |
| 13 | -//#endif | |
| 11 | +typedef enum : NSUInteger { | |
| 12 | + CNLiveClassifyJumpShowLoginView, | |
| 13 | + CNLiveClassifyJumpShowGuideView, | |
| 14 | + CNLiveClassifyJumpShowFuzzyView, | |
| 15 | + CNLiveClassifyJumpPushShopSDKVC, | |
| 16 | + CNLiveClassifyJumpPushAudioPlayerVC, | |
| 17 | + CNLiveClassifyJumpPushLoginVC, | |
| 18 | + CNLiveClassifyJumpPushHistoryVC, | |
| 19 | + CNLiveClassifyJumpPushRecordVC, | |
| 20 | + CNLiveClassifyJumpPushDownloadVC, | |
| 21 | + CNLiveClassifyJumpPushSearchVC, | |
| 22 | + CNLiveClassifyJumpPushAddDiviceVC, | |
| 23 | + CNLiveClassifyJumpPushCustomVC | |
| 24 | +} CNLiveClassifyJumpType; | |
| 25 | + | |
| 26 | +static NSString *const CNLiveLaunchWithFirsh = @"CNLiveLaunchWithFirsh"; | |
| 27 | +static NSString * const kCNLiveDeepLinkPushNotification = @"CNLiveDeepLinkPushNotification";//外部拉起启动相应 | |
| 28 | +static NSString * const kCNLiveRemotePushNotification = @"CNLiveRemotePushNotification";//远程推送启动相应 | |
| 29 | + | |
| 30 | +// 重定向链接失败通知 | |
| 31 | +#define CNLiveScanQRCodeScanErrorNotification @"CNLiveScanQRCodeScanError" | |
| 32 | + | |
| 33 | +// 本地存储音频信息KEY | |
| 34 | +#define wjjIsShowWitnessShadeKey @"wjjIsShowWitnessShadeKey" | |
| 35 | +#define wjjIsShowSportShadeKey @"wjjIsShowSportShadeKey" | |
| 36 | +#define wjjIsShowSupervisionShadeKey @"wjjIsShowSupervisionShadeKey"//监管 | |
| 37 | +// showGuide"提示导航页" | |
| 38 | +#ifndef CNLiveNetAddShowGuideKey | |
| 39 | +#define CNLiveNetAddShowGuideKey @"CNLiveNetAddShowGuideKey" | |
| 40 | +#endif | |
| 41 | + | |
| 42 | +#ifndef CNLiveNetAddShowGuideHKey | |
| 43 | +#define CNLiveNetAddShowGuideHKey @"CNLiveNetAddShowGuideHKey" | |
| 44 | +#endif | |
| 45 | + | |
| 14 | 46 | #ifndef CNLiveNetAddGetCategoryChannels |
| 15 | 47 | #define CNLiveNetAddGetCategoryChannels @"CNLiveNetAddGetCategoryChannels" |
| 16 | 48 | #endif |
| ... | ... | @@ -34,6 +66,33 @@ |
| 34 | 66 | #ifndef CNWjjClassifyChannelsRequestHideLoadingNotifiName |
| 35 | 67 | #define CNWjjClassifyChannelsRequestHideLoadingNotifiName @"CNWjjClassifyChannelsRequestHideLoadingNotifiName" |
| 36 | 68 | #endif |
| 69 | +#pragma mark - 电商中国首页 | |
| 70 | +#ifndef kDSHappinessPageControlScrollEnableNotification | |
| 71 | +#define kDSHappinessPageControlScrollEnableNotification @"kDSHappinessPageControlScrollEnableNotification" | |
| 72 | +#endif | |
| 73 | + | |
| 74 | +#pragma mark - 登录 | |
| 75 | +#ifndef TouristloginTipsViewActionNotification | |
| 76 | +#define TouristloginTipsViewActionNotification @"touristloginTipsViewActionNotification" | |
| 77 | +#endif | |
| 78 | +#pragma mark - 听见中国 | |
| 79 | +// 分类-听见中国-音频播放状态(播放,暂停) | |
| 80 | +#ifndef WjjAudioPlayerStatusNotification | |
| 81 | +#define WjjAudioPlayerStatusNotification @"WjjAudioPlayerStatusNotification" | |
| 82 | +#endif | |
| 83 | +// 分类-听见中国-音频播放进度 | |
| 84 | +#ifndef WjjAudioPlayerScheduleNotification | |
| 85 | +#define WjjAudioPlayerScheduleNotification @"WjjAudioPlayerScheduleNotification" | |
| 86 | +#endif | |
| 87 | +// 分类-听见中国-一首音频播放完成 | |
| 88 | +#ifndef WjjAudioPlayDidFinishNotification | |
| 89 | +#define WjjAudioPlayDidFinishNotification @"WjjAudioPlayDidFinishNotification" | |
| 90 | +#endif | |
| 91 | +// 分类-听见中国-播放哪一首音频(contenId) | |
| 92 | +#ifndef WjjAudioPlayerWhichPlayingNotification | |
| 93 | +#define WjjAudioPlayerWhichPlayingNotification @"WjjAudioPlayerWhichPlayingNotification" | |
| 94 | +#endif | |
| 95 | +#define wjjLastAudioInfoSaveKey @"wjjLastAudioInfoSaveKey" | |
| 37 | 96 | //分类-频道-新版本 |
| 38 | 97 | #ifndef CNWjjNewCategoryChannelVerKey |
| 39 | 98 | #define CNWjjNewCategoryChannelVerKey @"CNWjjNewCategoryChannelVerKey" |
| ... | ... | @@ -42,13 +101,37 @@ |
| 42 | 101 | #ifndef CNWjjOldCategoryChannelVerKey |
| 43 | 102 | #define CNWjjOldCategoryChannelVerKey @"CNWjjOldCategoryChannelVerKey" |
| 44 | 103 | #endif |
| 45 | -#pragma mark - 电商中国首页 | |
| 46 | -#ifndef kDSHappinessPageControlScrollEnableNotification | |
| 47 | -#define kDSHappinessPageControlScrollEnableNotification @"kDSHappinessPageControlScrollEnableNotification" | |
| 48 | -#endif | |
| 49 | - | |
| 50 | 104 | #ifndef ChannelsRequested |
| 51 | 105 | #define ChannelsRequested @"channelsRequested" |
| 52 | 106 | #endif |
| 53 | 107 | |
| 108 | +#ifndef ChannelsShowGuide | |
| 109 | +#define ChannelsShowGuide @"channelsShowGuide" | |
| 110 | +#endif | |
| 111 | + | |
| 112 | +#ifndef ChannelsSelectFirst | |
| 113 | +#define ChannelsSelectFirst @"channelsSelectFirst" | |
| 114 | +#endif | |
| 115 | +#ifndef ChannelsSelectSecond | |
| 116 | +#define ChannelsSelectSecond @"channelsSelectSecond" | |
| 117 | +#endif | |
| 118 | + | |
| 119 | +#ifndef LoginPrepositionUrl | |
| 120 | +#define LoginPrepositionUrl @"loginPrepositionUrl" | |
| 121 | +#endif | |
| 122 | + | |
| 123 | +#ifndef ActivityNewUrl | |
| 124 | +#define ActivityNewUrl @"activityNewUrl" | |
| 125 | +#endif | |
| 126 | + | |
| 127 | +//分类-频道-幸福中国导航更新颜色 | |
| 128 | +#ifndef CNWjjDSShopNavColorChangeNotifiName | |
| 129 | +#define CNWjjDSShopNavColorChangeNotifiName @"CNWjjDSShopNavColorChangeNotifiName" | |
| 130 | +#endif | |
| 131 | + | |
| 132 | +//分类-频道-幸福中国是否可左右滑动 | |
| 133 | +#ifndef kDSHappinessPageControlScrollEnableNotification | |
| 134 | +#define kDSHappinessPageControlScrollEnableNotification @"kDSHappinessPageControlScrollEnableNotification" | |
| 135 | +#endif | |
| 136 | + | |
| 54 | 137 | #endif /* CNLiveCommonDefines_h */ | ... | ... |
CNLiveVideoClassifyKit/Classes/Header/CNLivevideoClassifyPCH.h
| ... | ... | @@ -20,6 +20,7 @@ |
| 20 | 20 | #import <CNLiveBeeHive/BHConfig.h> |
| 21 | 21 | #import <CNLiveEnvironment/CNLiveEnvironment.h> |
| 22 | 22 | #import <MJExtension/MJExtension.h> |
| 23 | +//#import <UMCommon/MobClick.h> | |
| 23 | 24 | #import "CNLiveCommonDefines.h" |
| 24 | 25 | #import <QMUIKit/QMUIKit.h> |
| 25 | 26 | #import "UIImage+AdBundleImage.h" | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNLiveClassifyJumpBridge.h
| ... | ... | @@ -13,9 +13,28 @@ NS_ASSUME_NONNULL_BEGIN |
| 13 | 13 | @interface CNLiveClassifyJumpBridge : NSObject |
| 14 | 14 | @property (nonatomic, strong) id<CNLiveVideoClassifyProtocol> protocol; |
| 15 | 15 | |
| 16 | -+(instancetype)shareInstance; | |
| 16 | ++ (instancetype)shareInstance; | |
| 17 | 17 | |
| 18 | -+(UIViewController *)ListViewWithPageType:(NSInteger)pageType param:(NSDictionary *_Nullable)param; | |
| 18 | ++ (UIViewController *)ListViewWithPageType:(NSInteger)pageType param:(NSDictionary *_Nullable)param; | |
| 19 | + | |
| 20 | ++ (void)listViewRefreshWithVC:(UIViewController *)currentVC pageType:(NSInteger)pageType param:(NSDictionary * _Nullable)param refreshTime:(NSTimeInterval)time; | |
| 21 | + | |
| 22 | ++ (UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC pushType:(CNLiveClassifyJumpType)type; | |
| 23 | + | |
| 24 | ++ (UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC pushType:(CNLiveClassifyJumpType)type pageType:(NSInteger)pageType param:(NSDictionary * _Nullable)param; | |
| 25 | + | |
| 26 | ++(void)popOverShowEvent:(UIEvent *)event | |
| 27 | + imageDone:(FTPopDoneBlock)doneBlock | |
| 28 | + dismissBlock:(FTPopDismissBlock)dismissBlock; | |
| 29 | ++(void)showGuideShadeViewType:(NSInteger)type cellFrame:(CGRect)cellFrame cancelBlock:(FTPopDismissBlock)cancelBlock; | |
| 30 | + | |
| 31 | ++ (void)checkForloginTurnToWithURL:(NSURL *)url; | |
| 32 | + | |
| 33 | ++ (void)checkWithFunctionForShareURL:(NSString *)shareUrl; | |
| 34 | + | |
| 35 | ++ (void)bringCenterLoginViewToFront; | |
| 36 | + | |
| 37 | ++ (BOOL)audioPlayerIsplaying; | |
| 19 | 38 | @end |
| 20 | 39 | |
| 21 | 40 | NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNLiveClassifyJumpBridge.m
| ... | ... | @@ -32,4 +32,51 @@ |
| 32 | 32 | { |
| 33 | 33 | return [[CNLiveClassifyJumpBridge shareInstance].protocol listViewShowPageType:pageType param:param]; |
| 34 | 34 | } |
| 35 | + | |
| 36 | ++(void)listViewRefreshWithVC:(UIViewController *)currentVC pageType:(NSInteger)pageType param:(NSDictionary *)param refreshTime:(NSTimeInterval)time | |
| 37 | +{ | |
| 38 | + | |
| 39 | +} | |
| 40 | + | |
| 41 | ++(UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC pushType:(CNLiveClassifyJumpType)type | |
| 42 | +{ | |
| 43 | + return [CNLiveClassifyJumpBridge showViewOrPushVCWithCurrentVC:currentVC pushType:type pageType:0 param:nil]; | |
| 44 | +} | |
| 45 | ++(UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC pushType:(CNLiveClassifyJumpType)type pageType:(NSInteger)pageType param:(NSDictionary *_Nullable)param | |
| 46 | +{ | |
| 47 | + return [[CNLiveClassifyJumpBridge shareInstance].protocol showViewOrPushVCWithCurrentVC:currentVC pushType:type pageType:pageType param:param]; | |
| 48 | +} | |
| 49 | ++(void)popOverShowEvent:(UIEvent *)event imageDone:(FTPopDoneBlock)doneBlock dismissBlock:(FTPopDismissBlock)dismissBlock | |
| 50 | +{ | |
| 51 | + [[CNLiveClassifyJumpBridge shareInstance].protocol popOverShowEvent:event imageDone:doneBlock dismissBlock:dismissBlock]; | |
| 52 | +} | |
| 53 | ++(void)checkForloginTurnToWithURL:(NSURL *)url | |
| 54 | +{ | |
| 55 | + Class class = NSClassFromString(@"CNLiveSkipActionManager"); | |
| 56 | + SEL sel = NSSelectorFromString(@"checkForloginTurnToWithURL"); | |
| 57 | + if (class && sel) { | |
| 58 | + [class performSelector:sel withObject:url]; | |
| 59 | + } | |
| 60 | +} | |
| 61 | + | |
| 62 | ++(void)checkWithFunctionForShareURL:(NSString *)shareUrl | |
| 63 | +{ | |
| 64 | + Class class = NSClassFromString(@"CNLiveSkipActionManager"); | |
| 65 | + SEL sel = NSSelectorFromString(@"checkWithFunctionForShareURL"); | |
| 66 | + if (class && sel) { | |
| 67 | + [class performSelector:sel withObject:shareUrl]; | |
| 68 | + } | |
| 69 | + | |
| 70 | +} | |
| 71 | + | |
| 72 | ++ (void)bringCenterLoginViewToFront | |
| 73 | +{ | |
| 74 | + Class class = NSClassFromString(@"CNTouristsLoginView"); | |
| 75 | + SEL sel = NSSelectorFromString(@"bringCenterLoginViewToFront"); | |
| 76 | + [class performSelector:sel]; | |
| 77 | +} | |
| 78 | ++ (BOOL)audioPlayerIsplaying | |
| 79 | +{ | |
| 80 | + return [[CNLiveClassifyJumpBridge shareInstance].protocol audioPlayerIsplaying]; | |
| 81 | +} | |
| 35 | 82 | @end | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNLiveListManager.h
| ... | ... | @@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN |
| 19 | 19 | -(UIViewController *)model:(CNCategoryGetChannelModel *)model black:(BOOL)black bgImage:(NSString *)bgImage bgColor:(NSString *)bgColor bgImageH5:(NSString *)bgImageH5; |
| 20 | 20 | |
| 21 | 21 | - (void)requestWebViewForScrollView:(nonnull UIScrollView *)scrollView isBeginDragging:(BOOL)isBeginDragging; |
| 22 | + | |
| 23 | ++ (CNCategoryBaseViewController *)CNCategoryBaseViewController; | |
| 22 | 24 | @end |
| 23 | 25 | |
| 24 | 26 | NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNLiveListManager.m
| ... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 | |
| 8 | 8 | #import "CNLiveListManager.h" |
| 9 | 9 | #import "CNCategoryGetChannelModel.h" |
| 10 | +#import "CNLiveClassifySegmentController.h" | |
| 10 | 11 | |
| 11 | 12 | @interface CNLiveListManager() |
| 12 | 13 | { |
| ... | ... | @@ -25,6 +26,10 @@ |
| 25 | 26 | return manager; |
| 26 | 27 | } |
| 27 | 28 | |
| 29 | ++(CNCategoryBaseViewController *)CNCategoryBaseViewController | |
| 30 | +{ | |
| 31 | + return [[CNLiveClassifySegmentController alloc] init]; | |
| 32 | +} | |
| 28 | 33 | |
| 29 | 34 | -(UIViewController *)model:(CNCategoryGetChannelModel *)model black:(BOOL)black bgImage:(NSString *)bgImage bgColor:(nonnull NSString *)bgColor bgImageH5:(nonnull NSString *)bgImageH5 |
| 30 | 35 | { |
| ... | ... | @@ -58,9 +63,9 @@ |
| 58 | 63 | beginoffsetY = scrollView.offsetY; |
| 59 | 64 | }else |
| 60 | 65 | { |
| 61 | - if (scrollView.offsetY - beginoffsetY>2) { | |
| 66 | + if (scrollView.offsetY - beginoffsetY>5) { | |
| 62 | 67 | !self.scrollViewDidScrollBlock ?: self.scrollViewDidScrollBlock(YES); |
| 63 | - }else if (scrollView.offsetY - beginoffsetY<-2) { | |
| 68 | + }else if (scrollView.offsetY - beginoffsetY<0) { | |
| 64 | 69 | !self.scrollViewDidScrollBlock ?: self.scrollViewDidScrollBlock(NO); |
| 65 | 70 | } |
| 66 | 71 | } | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNLiveVideoClassifyProtocol.h
| ... | ... | @@ -7,8 +7,11 @@ |
| 7 | 7 | |
| 8 | 8 | #import <Foundation/Foundation.h> |
| 9 | 9 | |
| 10 | -NS_ASSUME_NONNULL_BEGIN | |
| 10 | +typedef void(^FTPopDoneBlock)(NSInteger selectIndex); | |
| 11 | + | |
| 12 | +typedef void(^FTPopDismissBlock)(void); | |
| 11 | 13 | |
| 14 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | 15 | @protocol CNLiveVideoClassifyProtocol <NSObject> |
| 13 | 16 | /** |
| 14 | 17 | *返回需要加载的View |
| ... | ... | @@ -17,6 +20,13 @@ NS_ASSUME_NONNULL_BEGIN |
| 17 | 20 | */ |
| 18 | 21 | -(UIViewController *)listViewShowPageType:(NSUInteger)pageType |
| 19 | 22 | param:(NSDictionary *)param; |
| 23 | +-(UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC | |
| 24 | + pushType:(CNLiveClassifyJumpType)type pageType:(NSInteger)pageType param:(NSDictionary *_Nullable)param; | |
| 25 | +-(BOOL)audioPlayerIsplaying; | |
| 26 | + | |
| 27 | +-(void)popOverShowEvent:(UIEvent *)event | |
| 28 | + imageDone:(FTPopDoneBlock)doneBlock | |
| 29 | + dismissBlock:(FTPopDismissBlock)dismissBlock; | |
| 20 | 30 | @end |
| 21 | 31 | |
| 22 | 32 | NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNWebRedirectHandle.h
0 → 100644
| 1 | +// | |
| 2 | +// CNWebRedirectHandle.h | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/1/3. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// 跳转二级webview的管理类 | |
| 8 | + | |
| 9 | +#import <Foundation/Foundation.h> | |
| 10 | + | |
| 11 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | + | |
| 13 | +@interface CNWebRedirectHandle : NSObject | |
| 14 | + | |
| 15 | +@property (nonatomic, assign) BOOL isSelectedClassify;//是否进入过分类页面 | |
| 16 | +@property (nonatomic, assign) BOOL isClickedIntegral; //未进入过分类页面时,是否点击过积分任务跳转 | |
| 17 | +@property (nonatomic, assign) NSInteger channelId; //一级index | |
| 18 | +@property (nonatomic, assign) NSInteger classifyId; //二级index | |
| 19 | + | |
| 20 | ++ (CNWebRedirectHandle *)manager; | |
| 21 | + | |
| 22 | +// 外部使用(短连接->长连接)(多了encode decode操作) | |
| 23 | +- (void)webRedirectHandleWithUrlStr:(NSString *)urlStr; | |
| 24 | +// 外部使用(跳转二级webView页)(无encode decode,无短链重定向长链操作,仅仅初始化二级webview做跳转) | |
| 25 | +- (void)turnToCategorySubWebVCWithUrl:(NSString *)urlStr; | |
| 26 | + | |
| 27 | +// junbo自己使用 (无encode decode操作。因为一二级webview内不再做任何encode decode操作,容易产生多次encode问题,所以一二级webview内使用这个) | |
| 28 | +- (void)jb_webRedirectHandleWithUrlStr:(NSString *)urlStr; | |
| 29 | + | |
| 30 | +@end | |
| 31 | + | |
| 32 | +NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/Manager/CNWebRedirectHandle.m
0 → 100644
| 1 | +// | |
| 2 | +// CNWebRedirectHandle.m | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/1/3. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "CNWebRedirectHandle.h" | |
| 10 | + | |
| 11 | +@interface CNWebRedirectHandle ()<NSURLSessionTaskDelegate> | |
| 12 | + | |
| 13 | +@property (nonatomic, copy) NSString *loadUrlStr; | |
| 14 | +@property (nonatomic, assign) BOOL isRedirect; | |
| 15 | +@property (nonatomic, copy) NSString *oldUrlStr; | |
| 16 | +@property (nonatomic, copy) NSString *redirectUrlStr; | |
| 17 | + | |
| 18 | +@end | |
| 19 | + | |
| 20 | +@implementation CNWebRedirectHandle | |
| 21 | + | |
| 22 | ++ (CNWebRedirectHandle *)manager | |
| 23 | +{ | |
| 24 | + static id instance = nil; | |
| 25 | + static dispatch_once_t onceToken; | |
| 26 | + dispatch_once(&onceToken, ^{ | |
| 27 | + instance = [[self alloc] init]; | |
| 28 | + }); | |
| 29 | + return instance; | |
| 30 | +} | |
| 31 | + | |
| 32 | +- (void)webRedirectHandleWithUrlStr:(NSString *)urlStr { | |
| 33 | + | |
| 34 | + urlStr = [urlStr stringByURLDecode]; | |
| 35 | + urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; | |
| 36 | + [self jb_webRedirectHandleWithUrlStr:urlStr]; | |
| 37 | +} | |
| 38 | + | |
| 39 | +- (void)turnToCategorySubWebVCWithUrl:(NSString *)urlStr { | |
| 40 | +#warning pushVC | |
| 41 | + // 二级页 | |
| 42 | +// NSDictionary *dic = [NSString getURLParameters:urlStr]; | |
| 43 | +// AppDelegate *delegte = (AppDelegate *)[UIApplication sharedApplication].delegate; | |
| 44 | +// delegte.shouldChangeOrientation = WebPlayer; | |
| 45 | +// NSString *pageTitle = @" "; | |
| 46 | +// if ([dic containsObjectForKey:@"isShowTitle"] && [dic[@"isShowTitle"] isEqualToString:@"true"]) { | |
| 47 | +// pageTitle = nil; | |
| 48 | +// } | |
| 49 | +// CNDarenCategoryWebController *webVC = [[CNDarenCategoryWebController alloc] initWithUrl:urlStr pageTitle:pageTitle]; | |
| 50 | +// webVC.statUrl = urlStr; | |
| 51 | +// if([dic[@"model"] isEqualToString:@"witness"]){ | |
| 52 | +// webVC.shareType = @"witnessVideo"; | |
| 53 | +// } | |
| 54 | +// else if([dic[@"model"] isEqualToString:@"3_witness"]){ | |
| 55 | +// webVC.shareType = @"witnessArticle"; | |
| 56 | +// } | |
| 57 | +// else { | |
| 58 | +// webVC.shareType = @"article"; | |
| 59 | +// } | |
| 60 | +// [[AppDelegate sharedAppDelegate] pushViewController:webVC withBackTitle:@" "]; | |
| 61 | +} | |
| 62 | + | |
| 63 | +- (void)jb_webRedirectHandleWithUrlStr:(NSString *)urlStr { | |
| 64 | + [QMUITips showLoadingInView:AppKeyWindow]; | |
| 65 | + self.loadUrlStr = urlStr?urlStr:@""; | |
| 66 | + NSURL *url = [NSURL URLWithString:urlStr]; | |
| 67 | + NSMutableURLRequest *quest = [NSMutableURLRequest requestWithURL:url]; | |
| 68 | + quest.HTTPMethod = @"GET"; | |
| 69 | + | |
| 70 | + weakself | |
| 71 | + NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; | |
| 72 | + config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData; | |
| 73 | + NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue currentQueue]]; | |
| 74 | + NSURLSessionDataTask *task = [urlSession dataTaskWithRequest:quest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) | |
| 75 | + { | |
| 76 | + [QMUITips hideAllTipsInView:AppKeyWindow]; | |
| 77 | + if (error) { | |
| 78 | + if (error.code == -1009) { | |
| 79 | + [QMUITips showError:@"似乎已断开与互联网的连接。" inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 80 | + } | |
| 81 | + weakSelf.isRedirect = NO; | |
| 82 | + weakSelf.oldUrlStr = nil; | |
| 83 | + weakSelf.redirectUrlStr = nil; | |
| 84 | + return ; | |
| 85 | + } | |
| 86 | + | |
| 87 | + NSString *loadUrlStr = weakSelf.loadUrlStr; | |
| 88 | + if (weakSelf.isRedirect) { | |
| 89 | + loadUrlStr = weakSelf.redirectUrlStr; | |
| 90 | + [CNLiveClassifyJumpBridge checkWithFunctionForShareURL:loadUrlStr]; | |
| 91 | + } else { | |
| 92 | + // 没有重定向 | |
| 93 | + [[NSNotificationCenter defaultCenter] postNotificationName:CNLiveScanQRCodeScanErrorNotification object:nil]; | |
| 94 | + [QMUITips showWithText:@"链接地址错误" inView:AppKeyWindow hideAfterDelay:1.5f]; | |
| 95 | + } | |
| 96 | + weakSelf.isRedirect = NO; | |
| 97 | + weakSelf.oldUrlStr = nil; | |
| 98 | + weakSelf.redirectUrlStr = nil; | |
| 99 | + }]; | |
| 100 | + [task resume]; | |
| 101 | + | |
| 102 | +} | |
| 103 | + | |
| 104 | +#pragma mark - NSURLSessionTaskDelegate | |
| 105 | +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * __nullable))completionHandler | |
| 106 | +{ | |
| 107 | + NSLog(@"statusCode: %ld", response.statusCode); | |
| 108 | + | |
| 109 | + NSDictionary *headers = response.allHeaderFields; | |
| 110 | + NSLog(@"%@", headers); | |
| 111 | + if (response.statusCode==302 || response.statusCode==301) { | |
| 112 | + self.isRedirect = YES; | |
| 113 | + self.oldUrlStr = [[response URL] absoluteString]; | |
| 114 | + self.redirectUrlStr = headers[@"Location"]; | |
| 115 | + NSLog(@"======>>>>>>111111:%@",headers[@"Location"]); | |
| 116 | + } | |
| 117 | + NSLog(@"redirect url: %@", headers[@"Location"]); // 重定向的地址,如:http://www.jd.com | |
| 118 | + NSLog(@"newRequest url: %@", [request URL]); // 重定向的地址,如:http://www.jd.com | |
| 119 | + NSLog(@"redirect response url: %@", [response URL]);// 触发重定向请求的地址,如:http://www.360buy.com | |
| 120 | + | |
| 121 | + completionHandler(request); | |
| 122 | + // completionHandler(nil);// 参数为nil,表示拦截(禁止)重定向 | |
| 123 | +} | |
| 124 | + | |
| 125 | +@end | ... | ... |
CNLiveVideoClassifyKit/Classes/Model/CNCategoryGetChannelModel.h
| ... | ... | @@ -50,3 +50,79 @@ |
| 50 | 50 | - (NSInteger)containsWithChannelArray:(NSArray <NSString *>*)channelArray; |
| 51 | 51 | |
| 52 | 52 | @end |
| 53 | + | |
| 54 | +@interface CNLiveAlbumAudioListModel : NSObject<NSCoding> | |
| 55 | +@property (nonatomic, copy) NSString *activityId; //活动ID | |
| 56 | +@property (nonatomic, copy) NSString *cmccActiveId;//音响播放id | |
| 57 | +@property (nonatomic, copy) NSString *title; //标题名称 | |
| 58 | +@property (nonatomic, copy) NSString *albumId; //专辑ID | |
| 59 | +@property (nonatomic, copy) NSString *albumName; //专辑名称 | |
| 60 | +@property (nonatomic, copy) NSString *actor; //作者 | |
| 61 | +@property (nonatomic, copy) NSString *modelId; //类型ID,5是音频 | |
| 62 | +@property (nonatomic, copy) NSString *time; | |
| 63 | +@property (nonatomic, copy) NSString *img; | |
| 64 | +@property (nonatomic, copy) NSString *counts; //后面标题号 | |
| 65 | +@property (nonatomic, copy) NSString *viewCounts; //人数 | |
| 66 | +@property (nonatomic, copy) NSString *schedule; //播放长度 | |
| 67 | +@property (nonatomic, copy) NSString *comments; //评论数 | |
| 68 | +@property (nonatomic, copy) NSString *contentId; | |
| 69 | +@property (nonatomic, copy) NSString *duration; //时长 | |
| 70 | +@property (nonatomic, copy) NSString *shareUrl; | |
| 71 | +@property (nonatomic, copy) NSString *aid; //专辑ID | |
| 72 | +@property (nonatomic, copy) NSString *poster; //封面图 | |
| 73 | +@property (nonatomic, copy) NSString *channelName; // | |
| 74 | +@property (nonatomic, copy) NSString *likesNum; //点赞人数 | |
| 75 | +@property (nonatomic, copy) NSString *goodsJson; //商品 | |
| 76 | +@property (nonatomic, assign) BOOL liked; //自己是否点赞 | |
| 77 | +// 付费音频 h5->app | |
| 78 | +@property (nonatomic, copy) NSString * productId; | |
| 79 | +@property (nonatomic, copy) NSString * productType; //类型 0 免费 1 积分 2 付费 3 4试听 | |
| 80 | +@property (nonatomic, copy) NSString * iosRmb; | |
| 81 | +@property (nonatomic, copy) NSString * androidRmb; | |
| 82 | +@property (nonatomic, copy) NSString * point; //积分 | |
| 83 | +// 分享 | |
| 84 | +@property (nonatomic, copy) NSString * aProductId; | |
| 85 | +@property (nonatomic, copy) NSString * aProductType; | |
| 86 | +// 播放详情接口 | |
| 87 | +@property (nonatomic, copy) NSString * desc; //描述 | |
| 88 | +@property (nonatomic, copy) NSString * cultureDesc; | |
| 89 | +@property (nonatomic, copy) NSString * bodyContent; //内容简介 | |
| 90 | +@property (nonatomic, copy) NSString * model; // | |
| 91 | +@property (nonatomic, copy) NSString * publishTime; // | |
| 92 | +@property (nonatomic, copy) NSString * siteId; // | |
| 93 | +@property (nonatomic, copy) NSString * subTitle; | |
| 94 | +@property (nonatomic, copy) NSString *isSelected; //是否被播放过 | |
| 95 | +// 历史记录 | |
| 96 | +@property (nonatomic, copy) NSString *recordId; | |
| 97 | +@property (nonatomic, copy) NSString *activeId; | |
| 98 | +@property (nonatomic, copy) NSString *recent; | |
| 99 | +@property (nonatomic, copy) NSString *sid; | |
| 100 | +@property (nonatomic, copy) NSString *albumImg; | |
| 101 | +@property (nonatomic, copy) NSString *number; //展示前面的数字,自己加的 | |
| 102 | +@property (nonatomic, copy) NSString *isCellSelected; //cell是否被选中 | |
| 103 | +//下载的数据 | |
| 104 | +@property (nonatomic, copy) NSString *localPath; // 下载完成路径 | |
| 105 | +@property (nonatomic, copy) NSString *url; // url | |
| 106 | +@property (nonatomic, strong) NSData *resumeData; // 下载的数据 | |
| 107 | +@property (nonatomic, assign) CGFloat progress; // 下载进度 | |
| 108 | +@property (nonatomic, assign) NSUInteger totalFileSize; // 文件总大小 | |
| 109 | +@property (nonatomic, assign) NSUInteger tmpFileSize; // 下载大小 | |
| 110 | +@property (nonatomic, assign) NSUInteger speed; // 下载速度 | |
| 111 | +@property (nonatomic, assign) NSTimeInterval lastSpeedTime; // 上次计算速度时的时间戳 | |
| 112 | +@property (nonatomic, assign) NSUInteger intervalFileSize; // 计算速度时间内下载文件的大小 | |
| 113 | +@property (nonatomic, assign) NSUInteger lastStateTime; // 记录任务加入准备下载的时间(点击默认、暂停、失败状态),用于计算开始、停止任务的先后顺序 | |
| 114 | +@property (nonatomic, copy) NSString *fileSize; //服务器返的文件大小 | |
| 115 | +@property (nonatomic, copy) NSString *isProgram; //是节目列表还是简介列表里的 "0"简介 "1"节目 | |
| 116 | +@property (nonatomic, copy) NSString *createTime; //已购列表创建时间 | |
| 117 | +//@property (nonatomic, assign) BOOL isPay; //是否付费 | |
| 118 | +@property (nonatomic, assign) BOOL downloadType; //是否可下载 YES可下载 NO不可下载 | |
| 119 | +@property (nonatomic, copy) NSString *isHorizontalScreen;//是否是竖屏视频(非null&&=0是竖屏,1是横屏) 跳到点播详情使用 | |
| 120 | +@property (nonatomic, copy) NSString *liveType; //直播类型 | |
| 121 | + | |
| 122 | +@property (nonatomic, copy) NSString *albumType; // 0 是视频 1 是音频 | |
| 123 | +@property (nonatomic, assign) BOOL isVideoType; //是否是视频类型 Yes是包括点播和直播 NO 音频 | |
| 124 | +@property (nonatomic, copy) NSString *isStudy; // 1 可以考试 2 已学完 | |
| 125 | + | |
| 126 | + | |
| 127 | +@end | |
| 128 | + | ... | ... |
CNLiveVideoClassifyKit/Classes/Model/CNCategoryGetChannelModel.m
CNLiveVideoClassifyKit/Classes/view/CNAudioPlayProgressView.h
0 → 100644
| 1 | +// | |
| 2 | +// CNAudioPlayProgressView.h | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/7/3. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import <UIKit/UIKit.h> | |
| 10 | + | |
| 11 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | + | |
| 13 | +@interface CNAudioPlayProgressView : UIView | |
| 14 | + | |
| 15 | +- (void)animationWithProgres:(CGFloat)progress duration:(CGFloat)duration; | |
| 16 | + | |
| 17 | +@end | |
| 18 | + | |
| 19 | +NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/view/CNAudioPlayProgressView.m
0 → 100644
| 1 | +// | |
| 2 | +// CNAudioPlayProgressView.m | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/7/3. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "CNAudioPlayProgressView.h" | |
| 10 | + | |
| 11 | +@interface CNAudioPlayProgressView () | |
| 12 | + | |
| 13 | +@property (nonatomic, strong) CAShapeLayer *progressLayer; | |
| 14 | +@property (nonatomic, assign) CGFloat progress; | |
| 15 | + | |
| 16 | +@end | |
| 17 | + | |
| 18 | +@implementation CNAudioPlayProgressView | |
| 19 | + | |
| 20 | +- (instancetype)initWithFrame:(CGRect)frame | |
| 21 | +{ | |
| 22 | + self = [super initWithFrame:frame]; | |
| 23 | + if (self) { | |
| 24 | + self.progress = 0.0f; | |
| 25 | + } | |
| 26 | + return self; | |
| 27 | +} | |
| 28 | + | |
| 29 | +- (void)drawRect:(CGRect)rect { | |
| 30 | + | |
| 31 | + CGFloat lineWidth = 2.0f; | |
| 32 | + | |
| 33 | + //创建一个圆形贝塞尔曲线 | |
| 34 | + UIBezierPath *aPath2 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.width/2, self.height/2) radius:(self.width - lineWidth)/ 2 startAngle:-M_PI_2 endAngle:M_PI * 3.0 / 2.0 clockwise:YES]; | |
| 35 | + aPath2.lineCapStyle = kCGLineCapRound; //线条拐角 | |
| 36 | + aPath2.lineJoinStyle = kCGLineJoinRound; //终点处理 | |
| 37 | + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; | |
| 38 | + shapeLayer.frame = self.bounds;//设置shapeLayer的尺寸和位置 | |
| 39 | + shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充颜色为ClearColor | |
| 40 | + //设置线条的宽度和颜色 | |
| 41 | + shapeLayer.lineWidth = lineWidth; | |
| 42 | + shapeLayer.strokeColor = kWhiteColor.CGColor; | |
| 43 | + //将贝塞尔曲线设置为CAShapeLayer的path | |
| 44 | + shapeLayer.path = aPath2.CGPath; | |
| 45 | + //将shapeLayer添加到视图的layer上 | |
| 46 | + [self.layer addSublayer:shapeLayer]; | |
| 47 | + | |
| 48 | + self.progressLayer = [CAShapeLayer layer]; | |
| 49 | + self.progressLayer.frame = self.bounds; | |
| 50 | + self.progressLayer.fillColor = [UIColor clearColor].CGColor;//填充颜色为ClearColor | |
| 51 | + //设置线条的宽度和颜色 | |
| 52 | + self.progressLayer.lineWidth = lineWidth; | |
| 53 | + self.progressLayer.strokeColor = RGBA(255, 169, 82, 1).CGColor; | |
| 54 | + self.progressLayer.path = aPath2.CGPath; | |
| 55 | + self.progressLayer.strokeStart = 0; | |
| 56 | + self.progressLayer.strokeEnd = self.progress; | |
| 57 | + [self.layer addSublayer:self.progressLayer]; | |
| 58 | + | |
| 59 | +} | |
| 60 | + | |
| 61 | +- (void)animationWithProgres:(CGFloat)progress duration:(CGFloat)duration { | |
| 62 | + | |
| 63 | + self.progress = progress; | |
| 64 | + if (progress>1.0) { | |
| 65 | + progress = 1.0; | |
| 66 | + } | |
| 67 | +// NSLog(@"look here 进度:%f",progress); | |
| 68 | + [CATransaction begin]; | |
| 69 | + [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; | |
| 70 | + [CATransaction setAnimationDuration:duration]; | |
| 71 | + self.progressLayer.strokeEnd = progress; | |
| 72 | + [CATransaction commit]; | |
| 73 | + | |
| 74 | +} | |
| 75 | + | |
| 76 | +@end | ... | ... |
CNLiveVideoClassifyKit/Classes/view/CNSupervisionGuideViewManager.h
0 → 100644
| 1 | +// | |
| 2 | +// CNSupervisionGuideViewManager.h | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2020/3/10. | |
| 6 | +// Copyright © 2020 cnlive. All rights reserved. | |
| 7 | +// 目击者监管首次引导管理类 | |
| 8 | + | |
| 9 | +#import <Foundation/Foundation.h> | |
| 10 | + | |
| 11 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | + | |
| 13 | +@interface CNSupervisionGuideViewManager : NSObject | |
| 14 | + | |
| 15 | ++ (void)showSupervisionGuideViewWithVC:(UIViewController *)vc; | |
| 16 | + | |
| 17 | +@end | |
| 18 | + | |
| 19 | +NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/view/CNSupervisionGuideViewManager.m
0 → 100644
| 1 | +// | |
| 2 | +// CNSupervisionGuideViewManager.m | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2020/3/10. | |
| 6 | +// Copyright © 2020 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "CNSupervisionGuideViewManager.h" | |
| 10 | + | |
| 11 | +static CNSupervisionGuideViewManager * instance = nil; | |
| 12 | + | |
| 13 | +@interface CNSupervisionGuideViewManager () | |
| 14 | + | |
| 15 | +@property (nonatomic, strong) UIView *bgView; | |
| 16 | +@property (nonatomic, strong) UIImageView *titleView; | |
| 17 | +@property (nonatomic, strong) UIImageView *arrowsView; | |
| 18 | +@property (nonatomic, strong) UIImageView *contentView; | |
| 19 | +@property (nonatomic, strong) UIButton *cancelBtn; | |
| 20 | + | |
| 21 | +@end | |
| 22 | + | |
| 23 | +@implementation CNSupervisionGuideViewManager | |
| 24 | + | |
| 25 | ++ (void)showSupervisionGuideViewWithVC:(UIViewController *)vc { | |
| 26 | + | |
| 27 | + instance = [[self alloc] init]; | |
| 28 | + [vc.view addSubview:instance.bgView]; | |
| 29 | + [instance.bgView addSubview:instance.contentView]; | |
| 30 | + [instance.bgView addSubview:instance.arrowsView]; | |
| 31 | + [instance.bgView addSubview:instance.titleView]; | |
| 32 | + [instance.bgView addSubview:instance.cancelBtn]; | |
| 33 | + if (instance.titleView.bottom>instance.cancelBtn.top-20) { | |
| 34 | + instance.cancelBtn.top=instance.titleView.bottom+20; | |
| 35 | + } | |
| 36 | + | |
| 37 | +} | |
| 38 | + | |
| 39 | +- (void)cancelAction:(UIButton *)sender { | |
| 40 | + | |
| 41 | + [instance.contentView removeFromSuperview]; | |
| 42 | + [instance.arrowsView removeFromSuperview]; | |
| 43 | + [instance.titleView removeFromSuperview]; | |
| 44 | + [instance.cancelBtn removeFromSuperview]; | |
| 45 | + instance.contentView = nil; | |
| 46 | + instance.arrowsView = nil; | |
| 47 | + instance.titleView = nil; | |
| 48 | + instance.cancelBtn = nil; | |
| 49 | + [instance.bgView removeFromSuperview]; | |
| 50 | + instance.bgView = nil; | |
| 51 | + | |
| 52 | +} | |
| 53 | + | |
| 54 | +- (UIView *)bgView { | |
| 55 | + if (!_bgView) { | |
| 56 | + _bgView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
| 57 | + _bgView.backgroundColor = RGBA(0, 0, 0, 0.7); | |
| 58 | + } | |
| 59 | + return _bgView; | |
| 60 | +} | |
| 61 | + | |
| 62 | +- (UIImageView *)titleView { | |
| 63 | + if (!_titleView) { | |
| 64 | + CGFloat height = (KScreenWidth-22)*191/353; | |
| 65 | + _titleView = [[UIImageView alloc] initWithFrame:CGRectMake(11, kStatusHeight+72, KScreenWidth-22, height)]; | |
| 66 | + _titleView.image = [UIImage imageNamed:@"spjg_title"]; | |
| 67 | + } | |
| 68 | + return _titleView; | |
| 69 | +} | |
| 70 | + | |
| 71 | +- (UIImageView *)arrowsView { | |
| 72 | + if (!_arrowsView) { | |
| 73 | + _arrowsView = [[UIImageView alloc] initWithFrame:CGRectMake(KScreenWidth*0.5-46.5, instance.titleView.bottom+7, 20, 43)]; | |
| 74 | + _arrowsView.image = [UIImage imageNamed:@"spjg_arrow"]; | |
| 75 | + } | |
| 76 | + return _arrowsView; | |
| 77 | +} | |
| 78 | + | |
| 79 | +- (UIImageView *)contentView { | |
| 80 | + if (!_contentView) { | |
| 81 | + CGFloat height = (KScreenWidth-22)*80/353; | |
| 82 | + _contentView = [[UIImageView alloc] initWithFrame:CGRectMake(11, instance.arrowsView.bottom+7 , KScreenWidth-22, height)]; | |
| 83 | + _contentView.image = [UIImage imageNamed:@"spjg_content"]; | |
| 84 | + } | |
| 85 | + return _contentView; | |
| 86 | +} | |
| 87 | + | |
| 88 | +- (UIButton *)cancelBtn { | |
| 89 | + if (!_cancelBtn) { | |
| 90 | + _cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
| 91 | + _cancelBtn.frame = CGRectMake((KScreenWidth-96)*0.5, instance.contentView.bottom+104.5, 96, 39); | |
| 92 | + [_cancelBtn setImage:[UIImage imageNamed:@"spjg_know"] forState:UIControlStateNormal]; | |
| 93 | + [_cancelBtn addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside]; | |
| 94 | + } | |
| 95 | + return _cancelBtn; | |
| 96 | +} | |
| 97 | + | |
| 98 | +@end | ... | ... |
CNLiveVideoClassifyKit/Classes/view/CNWitnessShadeManager.h
0 → 100644
| 1 | +// | |
| 2 | +// CNWitnessShadeManager.h | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/7/5. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// 目击者遮罩引导管理类 | |
| 8 | + | |
| 9 | +#import <Foundation/Foundation.h> | |
| 10 | + | |
| 11 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | + | |
| 13 | +@interface CNWitnessShadeManager : NSObject | |
| 14 | + | |
| 15 | +// y: kStatusHeight+50+5 | |
| 16 | ++ (void)showWitnessShadeViewWithTopImg:(NSString *)topImg contentImg:(NSString *)contentImg topImgRect:(CGRect)topImgRect contentImgSize:(CGSize)contentImgSize vc:(UIViewController *)vc cancelBlock:(void(^)(void))cancelBlock; | |
| 17 | + | |
| 18 | +@end | |
| 19 | + | |
| 20 | +NS_ASSUME_NONNULL_END | ... | ... |
CNLiveVideoClassifyKit/Classes/view/CNWitnessShadeManager.m
0 → 100644
| 1 | +// | |
| 2 | +// CNWitnessShadeManager.m | |
| 3 | +// CNLiveNetAdd | |
| 4 | +// | |
| 5 | +// Created by cnliveJunBo on 2019/7/5. | |
| 6 | +// Copyright © 2019年 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "CNWitnessShadeManager.h" | |
| 10 | + | |
| 11 | +static CNWitnessShadeManager * instance = nil; | |
| 12 | +typedef void(^CancelBlock)(void); | |
| 13 | +@interface CNWitnessShadeManager () | |
| 14 | + | |
| 15 | +@property (nonatomic, strong) UIView *bgView; | |
| 16 | +@property (nonatomic, strong) UIImageView *mjzView; | |
| 17 | +@property (nonatomic, strong) UIImageView *arrowsView; | |
| 18 | +@property (nonatomic, strong) UIImageView *titleView; | |
| 19 | +@property (nonatomic, strong) UIButton *cancelBtn; | |
| 20 | + | |
| 21 | +@property (nonatomic, copy) NSString *topImgName; | |
| 22 | +@property (nonatomic, copy) NSString *contentImgName; | |
| 23 | +@property (nonatomic, assign) CGRect topImgRect; | |
| 24 | +@property (nonatomic, assign) CGSize contentImgSize; | |
| 25 | +@property (nonatomic, copy) CancelBlock cancelBlock; | |
| 26 | + | |
| 27 | +@end | |
| 28 | + | |
| 29 | +@implementation CNWitnessShadeManager | |
| 30 | + | |
| 31 | ++ (void)showWitnessShadeViewWithTopImg:(NSString *)topImg contentImg:(NSString *)contentImg topImgRect:(CGRect)topImgRect contentImgSize:(CGSize)contentImgSize vc:(UIViewController *)vc cancelBlock:(void(^)(void))cancelBlock { | |
| 32 | + | |
| 33 | + instance = [[self alloc] init]; | |
| 34 | + instance.topImgName = topImg; | |
| 35 | + instance.contentImgName = contentImg; | |
| 36 | + instance.topImgRect = topImgRect; | |
| 37 | + instance.contentImgSize = contentImgSize; | |
| 38 | + instance.cancelBlock = cancelBlock; | |
| 39 | + [vc.view addSubview:instance.bgView]; | |
| 40 | + [instance.bgView addSubview:instance.mjzView]; | |
| 41 | + [instance.bgView addSubview:instance.arrowsView]; | |
| 42 | + [instance.bgView addSubview:instance.titleView]; | |
| 43 | + [instance.bgView addSubview:instance.cancelBtn]; | |
| 44 | + if (instance.titleView.bottom>instance.cancelBtn.top-20) { | |
| 45 | + instance.cancelBtn.top=instance.titleView.bottom+20; | |
| 46 | + } | |
| 47 | + | |
| 48 | +} | |
| 49 | + | |
| 50 | +- (void)cancelAction:(UIButton *)sender { | |
| 51 | + | |
| 52 | + [instance.mjzView removeFromSuperview]; | |
| 53 | + [instance.arrowsView removeFromSuperview]; | |
| 54 | + [instance.titleView removeFromSuperview]; | |
| 55 | + [instance.cancelBtn removeFromSuperview]; | |
| 56 | + instance.mjzView = nil; | |
| 57 | + instance.arrowsView = nil; | |
| 58 | + instance.titleView = nil; | |
| 59 | + instance.cancelBtn = nil; | |
| 60 | + [instance.bgView removeFromSuperview]; | |
| 61 | + instance.bgView = nil; | |
| 62 | + if (instance.cancelBlock) { | |
| 63 | + instance.cancelBlock(); | |
| 64 | + } | |
| 65 | +} | |
| 66 | + | |
| 67 | +- (UIView *)bgView { | |
| 68 | + if (!_bgView) { | |
| 69 | + _bgView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
| 70 | + _bgView.backgroundColor = RGBA(0, 0, 0, 0.7); | |
| 71 | + } | |
| 72 | + return _bgView; | |
| 73 | +} | |
| 74 | + | |
| 75 | +- (UIImageView *)mjzView { | |
| 76 | + if (!_mjzView) { | |
| 77 | + _mjzView = [[UIImageView alloc] initWithFrame:instance.topImgRect]; | |
| 78 | + _mjzView.image = [UIImage loadBundleImage:instance.topImgName]; | |
| 79 | + } | |
| 80 | + return _mjzView; | |
| 81 | +} | |
| 82 | + | |
| 83 | +- (UIImageView *)arrowsView { | |
| 84 | + if (!_arrowsView) { | |
| 85 | + _arrowsView = [[UIImageView alloc] initWithFrame:CGRectMake(instance.mjzView.x+53, instance.mjzView.bottom+3, 47, 136)]; | |
| 86 | + _arrowsView.image = [UIImage loadBundleImage:@"mjz-arrow"]; | |
| 87 | + } | |
| 88 | + return _arrowsView; | |
| 89 | +} | |
| 90 | + | |
| 91 | +- (UIImageView *)titleView { | |
| 92 | + if (!_titleView) { | |
| 93 | + _titleView = [[UIImageView alloc] initWithFrame:CGRectMake((KScreenWidth-instance.contentImgSize.width)*0.5, instance.arrowsView.bottom+10, instance.contentImgSize.width, instance.contentImgSize.height)]; | |
| 94 | + _titleView.image = [UIImage loadBundleImage:instance.contentImgName]; | |
| 95 | + } | |
| 96 | + return _titleView; | |
| 97 | +} | |
| 98 | + | |
| 99 | +- (UIButton *)cancelBtn { | |
| 100 | + if (!_cancelBtn) { | |
| 101 | + _cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | |
| 102 | + _cancelBtn.frame = CGRectMake((KScreenWidth-96)*0.5, 410.0*KScreenHeight/667.0, 96, 39); | |
| 103 | + [_cancelBtn setImage:[UIImage loadBundleImage:@"mjzgx_an"] forState:UIControlStateNormal]; | |
| 104 | + [_cancelBtn addTarget:self action:@selector(cancelAction:) forControlEvents:UIControlEventTouchUpInside]; | |
| 105 | + } | |
| 106 | + return _cancelBtn; | |
| 107 | +} | |
| 108 | + | |
| 109 | +@end | ... | ... |
Example/CNLiveVideoClassifyKit.xcodeproj/project.pbxproj
| ... | ... | @@ -579,9 +579,11 @@ |
| 579 | 579 | buildSettings = { |
| 580 | 580 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
| 581 | 581 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 582 | + ENABLE_BITCODE = NO; | |
| 582 | 583 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
| 583 | 584 | GCC_PREFIX_HEADER = "CNLiveVideoClassifyKit/CNLiveVideoClassifyKit-prefix.pch"; |
| 584 | 585 | INFOPLIST_FILE = "CNLiveVideoClassifyKit/CNLiveVideoClassifyKit-Info.plist"; |
| 586 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | |
| 585 | 587 | MARKETING_VERSION = 1.0; |
| 586 | 588 | MODULE_NAME = ExampleApp; |
| 587 | 589 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; |
| ... | ... | @@ -597,9 +599,11 @@ |
| 597 | 599 | buildSettings = { |
| 598 | 600 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
| 599 | 601 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 602 | + ENABLE_BITCODE = NO; | |
| 600 | 603 | GCC_PRECOMPILE_PREFIX_HEADER = YES; |
| 601 | 604 | GCC_PREFIX_HEADER = "CNLiveVideoClassifyKit/CNLiveVideoClassifyKit-prefix.pch"; |
| 602 | 605 | INFOPLIST_FILE = "CNLiveVideoClassifyKit/CNLiveVideoClassifyKit-Info.plist"; |
| 606 | + IPHONEOS_DEPLOYMENT_TARGET = 10.0; | |
| 603 | 607 | MARKETING_VERSION = 1.0; |
| 604 | 608 | MODULE_NAME = ExampleApp; |
| 605 | 609 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}"; | ... | ... |
Example/CNLiveVideoClassifyKit/CNLIVEViewController.m
| ... | ... | @@ -17,6 +17,7 @@ |
| 17 | 17 | #import <CNLiveNetworking.h> |
| 18 | 18 | #import <CNLiveCommonCategory/CNLiveCommonCategory.h> |
| 19 | 19 | #import <MJExtension.h> |
| 20 | +#import <CNLiveBeeHive/CNLiveBeeHive.h> | |
| 20 | 21 | #import "CNTools.h" |
| 21 | 22 | |
| 22 | 23 | |
| ... | ... | @@ -40,7 +41,7 @@ |
| 40 | 41 | - (void)viewDidLoad |
| 41 | 42 | { |
| 42 | 43 | [super viewDidLoad]; |
| 43 | - | |
| 44 | + [BHConfig set:ChannelsSelectFirst value:@"0"]; | |
| 44 | 45 | [CNTools GetClassifyChannelsUrlsAndSave]; |
| 45 | 46 | self.title = @"首页"; |
| 46 | 47 | segArr = @[@"分类"]; | ... | ... |
Example/CNLiveVideoClassifyKit/CNLiveClassifyKitImpl.h
Example/CNLiveVideoClassifyKit/CNLiveClassifyKitImpl.m
| ... | ... | @@ -42,4 +42,21 @@ |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | } |
| 45 | +-(UIView *)showViewOrPushVCWithCurrentVC:(UIViewController *)currentVC | |
| 46 | + pushType:(CNLiveClassifyJumpType)type pageType:(NSInteger)pageType param:(NSDictionary *_Nullable)param { | |
| 47 | + return [UIView new]; | |
| 48 | +} | |
| 49 | +-(BOOL)audioPlayerIsplaying | |
| 50 | +{ | |
| 51 | + return YES; | |
| 52 | +} | |
| 53 | + | |
| 54 | +-(void)popOverShowEvent:(UIEvent *)event | |
| 55 | + imageDone:(FTPopDoneBlock)doneBlock | |
| 56 | + dismissBlock:(FTPopDismissBlock)dismissBlock{ | |
| 57 | + | |
| 58 | +} | |
| 59 | +-(void)showGuideShadeViewType:(NSInteger)type cellFrame:(CGRect)cellFrame cancelBlock:(FTPopDismissBlock)cancelBlock{ | |
| 60 | + | |
| 61 | +} | |
| 45 | 62 | @end | ... | ... |
Example/CNLiveVideoClassifyKit/CNLiveWebViewModuleImpl.m
| ... | ... | @@ -50,7 +50,7 @@ |
| 50 | 50 | WebBridge:(WKWebViewJavascriptBridge *)webBridge |
| 51 | 51 | FromVC:(CNLiveWebViewController *)fromVC |
| 52 | 52 | ResultData:(id)resultData |
| 53 | - CompleterBlock:(nonnull void (^)(id _Nonnull))completerBlock | |
| 53 | + CompleterBlock:( void (^)(id _Nonnull))completerBlock | |
| 54 | 54 | { |
| 55 | 55 | NSLog(@"交互方法响应了=>%@ 参数=>%@",handleName,resultData); |
| 56 | 56 | if ([handleName isEqualToString:kCNLiveWebForJSRegisterKWIdentifier]) { | ... | ... |
Example/Podfile
| ... | ... | @@ -26,6 +26,17 @@ target 'CNLiveVideoClassifyKit_Example' do |
| 26 | 26 | #删除WebViewJavascriptBridge中的WebViewJavascriptBridge.h和WebViewJavascriptBridge.m文件 |
| 27 | 27 | ################################################# |
| 28 | 28 | end |
| 29 | + | |
| 30 | + post_install do |installer_representation| | |
| 31 | + installer_representation.pods_project.targets.each do |target| | |
| 32 | + target.build_configurations.each do |config| | |
| 33 | + #share使用pod库时,pod中包含[UIApplication sharedApplication]的代码,需要下面的配置 | |
| 34 | + config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' | |
| 35 | + config.build_settings['ENABLE_BITCODE'] = false | |
| 36 | + end | |
| 37 | + end | |
| 38 | + end | |
| 39 | + | |
| 29 | 40 | target 'CNLiveVideoClassifyKit_Tests' do |
| 30 | 41 | inherit! :search_paths |
| 31 | 42 | ... | ... |