字符串在通知中莫名其妙被改了值,居然把修饰符从copy变成strong就行了
(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
self.player.viewControllerDisappear = NO;
[self acquireReloadNetWorking];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:false animated:YES];
if ([self.isPresent isEqualToString:@"1"]) {
}
else
{
self.player.viewControllerDisappear = YES;
[self pauseTimer];
[self removeTimerFromSelf];
self.player.pauseWhenAppResignActive = YES;
self.player.pauseByEvent = YES;
[self.player.currentPlayerManager pause];
[self.player stop];
[self.moviePlayerView removeFromSuperview];
self.moviePlayerView = nil;
self.player = nil;
}
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.navigationController setNavigationBarHidden:false animated:YES];
if ([self.isPresent isEqualToString:@"1"]) {
}
else
{
self.player.viewControllerDisappear = YES;
[self pauseTimer];
[self removeTimerFromSelf];
self.player.pauseWhenAppResignActive = YES;
self.player.pauseByEvent = YES;
[self.player.currentPlayerManager pause];
[self.player stop];
[self.moviePlayerView removeFromSuperview];
self.moviePlayerView = nil;
[self.player.currentPlayerManager stop];
self.player = nil;
}
}
- (void)configureAudioUI
{
self.listeningV416View = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kUIScreenWidth, kUIFitSize(192))];
self.listeningV416View.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.listeningV416View];
UIImageView *bgImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, kStatusBarH, kUIScreenWidth, kUIFitSize(192)-kStatusBarH)];
self.listeningV416bgImageV = bgImg;
bgImg.userInteractionEnabled = YES;
bgImg.image = [UIImage imageNamed:@"bj_img"];
[self.listeningV416View addSubview:bgImg];
self.audioTitleLabel = [[UILabel alloc] init];
[bgImg addSubview:self.audioTitleLabel];
self.audioTitleLabel.numberOfLines = 3;
self.audioTitleLabel.font = [UIFont systemFontOfSize:13];
self.audioTitleLabel.textColor = [UIColor whiteColor];
// self.audioTitleLabel.backgroundColor = [UIColor blueColor];
[self.audioTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@40);
make.top.equalTo (@(kStatusBarH));
make.width.equalTo(@100);
// make.height.equalTo(@100);
}];
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(0, 0, kUIFitSize(44), kUIFitSize(50));
[backBtn setImage:[UIImage imageNamed:@"back_arrow"] forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(backActionAction) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:backBtn];
NSArray *imgArr = @[@"ic_ds",@"shouye_ic_xiazai",@"ic_ej_sele"];
CGFloat btnWH = kUIFitSize(55);
CGFloat margin = kUIFitSize(14);
for (int i = 0; i < 3; i ++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(kUIScreenWidth- btnWH*4 + (btnWH + margin) * i, 0 , btnWH, btnWH);
[btn setImage:[UIImage imageNamed:imgArr[i]] forState:UIControlStateNormal];
btn.tag = 233+i;
[btn addTarget:self action:@selector(tipsBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:btn];
if (i == 0) {
self.daojishiBtn = btn;
}
}
// SZPortraitControlView *portraitView = self.controlView.portraitControlView;
CGFloat smallBtnW = kUIFitSize(36);
CGFloat smallBtnH = kUIFitSize(36);
CGFloat smallBtnTop = 68;
CGFloat bigBtnWH = kUIFitSize(70);
CGFloat bigBtnTop = 48;
//快退
UIButton *retreatBtn = [UIButton buttonWithType:UIButtonTypeCustom];
retreatBtn.frame = CGRectMake(kUIFitSize(27), smallBtnTop, smallBtnW, smallBtnH);
[retreatBtn setImage:[UIImage imageNamed:@"ic_kj"] forState:UIControlStateNormal];
[retreatBtn addTarget:self action:@selector(retreatBtnClick) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:retreatBtn];
//上一曲
UIButton *lastBtn = [UIButton buttonWithType:UIButtonTypeCustom];
lastBtn.frame = CGRectMake(kUIFitSize(90), smallBtnTop, smallBtnW, smallBtnH);
[lastBtn setImage:[UIImage imageNamed:@"ic_xq"] forState:UIControlStateNormal];
[lastBtn addTarget:self action:@selector(yinpinPrexNoti) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:lastBtn];
//开始、暂停audio_begin
UIButton *startBtn = [UIButton buttonWithType:UIButtonTypeCustom];
startBtn.frame = CGRectMake(kUIFitSize(153), bigBtnTop, bigBtnWH, bigBtnWH);
[startBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
[startBtn setImage:[UIImage imageNamed:@"ic_bf_yp"] forState:UIControlStateSelected];
[startBtn addTarget:self action:@selector(startBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:startBtn];
self.startAudioBtn = startBtn;
//下一曲
UIButton *nextBtn = [UIButton buttonWithType:UIButtonTypeCustom];
nextBtn.frame = CGRectMake(kUIFitSize(250), smallBtnTop, smallBtnW, smallBtnH);
[nextBtn setImage:[UIImage imageNamed:@"ic_xh"] forState:UIControlStateNormal];
[nextBtn addTarget:self action:@selector(yinpinnextNoti) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:nextBtn];
//快进
UIButton *forwardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
forwardBtn.frame = CGRectMake(kUIFitSize(318), smallBtnTop, smallBtnW, smallBtnH);
[forwardBtn setImage:[UIImage imageNamed:@"ic_kt"] forState:UIControlStateNormal];
[forwardBtn addTarget:self action:@selector(forwardBtnClick) forControlEvents:UIControlEventTouchUpInside];
[bgImg addSubview:forwardBtn];
//播放进度
SZPortraitControlView *portraitView = self.controlView.portraitControlView;
SZSliderView *audioslider = self.controlView.portraitControlView.slider;
// ZFSliderView *audioslider = [[ZFSliderView alloc]init];
audioslider.frame = CGRectMake(25, kUIFitSize(192) - 24, kUIScreenWidth-50, 24);
audioslider.value = 0;
audioslider.sliderBtn.backgroundColor = [UIColor clearColor];
audioslider.sliderBtn.layer.cornerRadius = audioslider.sliderBtn.width / 2;
audioslider.maximumTrackTintColor = RGBColor(218, 218, 218);
audioslider.minimumTrackTintColor = RGBColor(10, 147, 255);
// [playView addSubview:audioslider];
//当前播放时间
UILabel *currentProgressLabel = [[UILabel alloc] initWithFrame:CGRectMake(kUIFitSize(15), bgImg.height - kUIFitSize(21), 100, kUIFitSize(16))];
currentProgressLabel.textColor = [UIColor whiteColor];
currentProgressLabel.font = [UIFont systemFontOfSize:kUIFitSize(12)];
currentProgressLabel.text = portraitView.currentTimeLabel.text;
// [bgImg addSubview:currentProgressLabel];
// portraitView.currentTimeLabel = currentProgressLabel;
//音频总时间
UILabel *maxProgressLabel = [[UILabel alloc] initWithFrame:CGRectMake(kUIScreenWidth - kUIFitSize(115), bgImg.height - kUIFitSize(21), kUIFitSize(100), kUIFitSize(16))];
maxProgressLabel.textColor = [UIColor whiteColor];
maxProgressLabel.font = [UIFont systemFontOfSize:kUIFitSize(12)];
maxProgressLabel.text = portraitView.totalTimeLabel.text;//@"32:17";
maxProgressLabel.textAlignment = NSTextAlignmentRight;
self.listeningV416View.hidden = YES;
WS(weakself)
self.player.playerPlayTimeChanged = ^(id<SZPlayerMediaPlayback> _Nonnull asset, NSTimeInterval currentTime, NSTimeInterval duration) {
if ([weakself.isPlay isEqualToString:@"0"]&&(weakself.controlView.portraitControlView.slider.isdragging)) {
weakself.isPlay = @"1";
[weakself.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
}
if ((weakself.controlView.portraitControlView.slider.isdragging) && weakself.stopPlayout) {
NSTimeInterval currentTimeSec = weakself.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = weakself.player.totalTime;
weakself.timeout = floor(totalTimeSec - currentTimeSec+0.5);
[weakself startResidualTimer];
}
NSString *currentStr = [NSString stringWithFormat:@"%f",currentTime];
NSLog(@"currentLearnModel.lecture_length%@",weakself.currentLearnModel.lecture_length);
NSLog(@"currentTime%f",currentTime);
NSArray *totolTimeArray=[weakself.controlView.portraitControlView.totalTimeLabel.text componentsSeparatedByString:@":"];
switch (totolTimeArray.count) {
case 2:
{
NSString *minuteStr = [totolTimeArray firstObject];
NSString *secondStr = totolTimeArray[1];
weakself.maxTotolSecondNsnumber =minuteStr.intValue *60+secondStr.intValue;
}
break;
case 3:
{
NSString *hourStr = totolTimeArray[0];
NSString *minuteStr = totolTimeArray[1];
NSString *secondStr = totolTimeArray[2];
weakself.maxTotolSecondNsnumber =hourStr.intValue *3600+ minuteStr.intValue *60+secondStr.intValue;
}
break;
default:
{
NSString *secondStr = totolTimeArray[0];
weakself.maxTotolSecondNsnumber = secondStr.intValue;
}
break;
}
NSString *currentRate = [NSString stringWithFormat:@"%f",currentTime/weakself.maxTotolSecondNsnumber*100];
NSNumberFormatter *tempNum = [[NSNumberFormatter alloc] init];
[tempNum setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *numTemp = [tempNum numberFromString:currentRate];
int currentInt = currentTime;
NSNumber *percent =nil;
if (weakself.maxTotolSecondNsnumber*weakself.currentLearnModel.progress.intValue>currentInt*100) {
percent = weakself.currentLearnModel.progress;
} else {
percent = numTemp;
}
NSDictionary *dic = @{@"limit_speed":weakself.detailModel.study_configModel.limit_speed.intValue?weakself.detailModel.study_configModel.limit_speed:@0,
@"percent":percent.intValue?percent:@0,
@"isFullScreen":[NSNumber numberWithBool:weakself.player.isFullScreen]
};
[[NSNotificationCenter defaultCenter] postNotificationName:KClassIsPerpisssionSliderDrag object:dic];
};
}
- (void)addMovueNoti
{
// _moviePlayerView = [[UIView alloc]init];
// [self.view addSubview:_moviePlayerView];
// _moviePlayerView.frame = CGRectMake(0, 0, kUIScreenWidth, kUIFitSize(192));
// _moviePlayerView.backgroundColor = [UIColor colorWithRed:170 / 255.0 green:170 / 255.0 blue:170 / 255.0 alpha:1.0];
}
- (void)addPopState
{
self.isPresent = @"0";
}
- (void)keepPlayer
{
self.isPresent = @"1";//保持播放状态
}
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.urlStr containsString:@"company-course"]) {//自制课程
self.titleAry = @[@"简介",@"目录"];
self.keysAry = @[@"1",@"2"];
} else {//先之课程
self.titleAry = @[@"简介",@"目录",@"讲义"];
self.keysAry = @[@"1",@"2",@"3"];
}
self.listTableView.delegate = self;
self.listTableView.dataSource = self;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changePlayState:) name:KChangeTapClassNotifition object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yinpinnextNoti) name:KYInpinNextPaly object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yinpinPrexNoti) name:KYInpinPreviousPaly object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kaishixuexiNoti) name:Kaishixuexiliucheng object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addMovueNoti) name:KmovieView object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addPopState) name:@"XMNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keepPlayer) name:KkeepPlayer object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(backActionAction) name:@"learnbackAction" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToEvalueate) name:KJumpToEvaluate object:nil];
// app启动或者app从后台进入前台都会调用这个方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
// app从后台进入前台都会调用这个方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationWillEnterForegroundNotification object:nil];
// 添加检测app进入后台的观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];
[self handleService];
WS(weakSelf);
self.view.backgroundColor = kGlobalBg;
SZAVPlayerManager *playerManager = [[SZAVPlayerManager alloc] init];
// KSMediaPlayerManager *playerManager = [[KSMediaPlayerManager alloc] init];
// ZFIJKPlayerManager *playerManager = [[ZFIJKPlayerManager alloc] init];
[playerManager setScalingMode:SZPlayerScalingModeAspectFill];
self.playerManager = playerManager;
/// 播放器相关
self.player = [SZPlayerController playerWithPlayerManager:playerManager containerView:_moviePlayerView];
self.player.controlView = self.controlView;
self.player.currentPlayerManager.scalingMode = SZPlayerScalingModeAspectFit;
//横竖屏切换回调方法
self.player.orientationWillChange = ^(SZPlayerController * _Nonnull player, BOOL isFullScreen) {
[weakSelf setNeedsStatusBarAppearanceUpdate];
if (isFullScreen){//切换到全屏
}else{//切换到竖屏
}
};
self.player.orientationDidChanged = ^(SZPlayerController * _Nonnull player, BOOL isFullScreen) {
[weakSelf setNeedsStatusBarAppearanceUpdate];
if (isFullScreen){//切换到全屏
}else{//切换到竖屏
//
if ([weakSelf.player.assetURL.absoluteString containsString:@"mp3"] ) {
weakSelf.controlView.portraitControlView.currentTimeLabel.frame = CGRectMake(0, kUIFitSize(192)-40, 100, 24);
weakSelf.controlView.portraitControlView.totalTimeLabel.frame = CGRectMake(kUIScreenWidth-100, kUIFitSize(192)-40, 70, 24);
weakSelf.controlView.portraitControlView.slider.frame = CGRectMake(90, kUIFitSize(192)-40, kUIScreenWidth-180, 24);;
weakSelf.audioTitleLabel.text = weakSelf.currentLearnModel.lecture_title;
}
}
};
/// 播放完自动播放下一个
self.player.playerDidToEnd = ^(id _Nonnull asset) {
// @strongify(self)todoafter 搞不懂用法暂时注释
[weakSelf.player.orientationObserver exitFullScreenWithAnimated:YES];
[weakSelf.player.currentPlayerManager pause];
[weakSelf acqucireRecordServiceProgress:100 curpage:0];//自动切换防止视频内容过短导致请求不到约定间隔请求达不到100%
[weakSelf acquireSecondToSaveTotolTimeIsPop:NO];//请求时长
[weakSelf playNext];
//播放当前进度
// NSTimeInterval currentTime = weakSelf.player.totalTime;
// NSInteger current = round(currentTime);
// [weakSelf acqucireRecordServiceProgress:@(100) curpage:current];
// [weakSelf playNextLecture]; 播放下一章节
};
self.player.playerPlayStateChanged = ^(id<SZPlayerMediaPlayback> _Nonnull asset, SZPlayerPlaybackState playState) {
if (playState ==SZPlayerPlayStatePaused) {
[weakSelf.startAudioBtn setImage:[UIImage imageNamed:@"ic_bf_yp"] forState:UIControlStateNormal];
[weakSelf pauseTimer];
}
else
{
[weakSelf.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
[weakSelf beginTimer];
}
};
//禁止侧滑
id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
[self.view addGestureRecognizer:pan];
self.isLoadingLectures = YES;
//todo 这块等规则出来了再去定义如何操作 比如默认播放什么或者上次记录哪个页
[self configureNav];
[self configurePortraitPlayerView];
[self setupLandScapeControlViewView];
[self configureAudioUI];
}
- (void)configureNav
{
WS(weakself)
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.view addSubview:_backButton];
// _backButton.frame = CGRectMake(0,kStatusBarH, kUIFitSize(50), kUIFitSize(40));
[_backButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@15);
make.top.equalTo(@(kStatusBarH+5));
}];
[_backButton setImage:[UIImage imageNamed:@"back_arrow"] forState:UIControlStateNormal];
[_backButton setImage:[UIImage imageNamed:@"back_arrow"] forState:UIControlStateHighlighted];
[_backButton addTapGesture:^{
[weakself backActionAction];
}];
_backButton.backgroundColor = kUIColorFromRGBA(0x000000, 0.35);
_backButton.layer.cornerRadius = kUIFitSize(12.5);
_backButton.layer.masksToBounds = YES;
self.controlView.portraitControlView.slider.minimumTrackTintColor = kUIColorFromRGB(0x0085FE);
}
#pragma mark 点击去评价
- (void)jumpToEvalueate
{
self.isPresent = @"1";
}
#pragma mark 弹出评价之后去处理
#pragma mark- LCerBuySucceedViewDelegate 去评价
- (void)beginBtnAction
{
LMSNewEvaluateVC *evaluateVC = [[LMSNewEvaluateVC alloc]init];
evaluateVC.detailModel = self.detailModel;
[self.navigationController pushViewController:evaluateVC animated:YES];
[[NSNotificationCenter defaultCenter] postNotificationName:KJumpToEvaluate object:nil];
NSLog(@"LMSNewLearnJoinDetailVC点击了去评价按钮");
}
- (void)configurePortraitPlayerView
{
WS(weskself)
UIView *maskView = [[UIView alloc]init];
[self.controlView.portraitControlView.topToolView addSubview:maskView];
maskView.backgroundColor = [UIColor blackColor];
maskView.alpha = 0.3;
maskView.frame = CGRectMake(0, 0, SCREEN_WIDTH, kStatusBarH+35);
UIButton *downLoadBtn= [UIButton buttonWithType:UIButtonTypeCustom];
[downLoadBtn setImage:[UIImage imageNamed:@"ic_xz_sb"] forState:UIControlStateNormal];
// [self.controlView.portraitControlView.topToolView addSubview:downLoadBtn];
downLoadBtn.frame = CGRectMake(kUIScreenWidth-60, kStatusBarH-2, 40, 40);
[downLoadBtn addTapGesture:^{
NSLog(@"下载按钮触发");
weskself.isPresent = @"1";
[MobClick event:@"v4_ios_learn_download"];
#pragma mark-----下载视频跳转
if([[NSUserDefaults standardUserDefaults] boolForKey:kSettingIsUseDataWatchCourse] == NO && [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN) {//蜂窝网络且不允许流量下载
[weskself WWANNetworkingDownloadAler];
} else {
LMSNDownloadMenuViewContorller *vc = [[LMSNDownloadMenuViewContorller alloc] initWithModel:weskself.detailModel courType:weskself.urlStr];
vc.catcheManageClouse = ^{
LMSNMyDownloadVC *vc = [LMSNMyDownloadVC new];
[weskself.navigationController pushViewController:vc animated:false];
};
LNavigationViewController *nav = [[LNavigationViewController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[weskself presentViewController:nav animated:false completion:nil];
}
}];
// [self.controlView.portraitControlView.downLoadBtn setImage:[UIImage imageNamed:@"ic_xz_sb"] forState:UIControlStateNormal];
// [self.controlView.portraitControlView.downLoadBtn addTapGesture:^{
// NSLog(@"下载按钮触发");
// weskself.isPresent = @"1";
// [MobClick event:@"v4_ios_learn_download"];
//#pragma mark-----下载视频跳转
// if([[NSUserDefaults standardUserDefaults] boolForKey:kSettingIsUseDataWatchCourse] == NO && [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN) {//蜂窝网络且不允许流量下载
// [weskself WWANNetworkingDownloadAler];
// } else {
// LMSNDownloadMenuViewContorller *vc = [[LMS`NDownloadMenuViewContorller alloc] initWithModel:weskself.detailModel courType:weskself.urlStr];
// vc.catcheManageClouse = ^{
// LMSNMyDownloadVC *vc = [LMSNMyDownloadVC new];
// [weskself.navigationController pushViewController:vc animated:false];
// };
// [weskself presentViewController:vc animated:false completion:nil];
// }
// }];`
// [self.controlView.portraitControlView.rateBtn setImage:[UIImage imageNamed:@"ic_bs_one"] forState:UIControlStateNormal];
// [self.controlView.portraitControlView.rateBtn setTitle:@"" forState:UIControlStateNormal];
// self.controlView.portraitControlView.rateBtn.hidden = YES;//隐藏竖版倍速播放
UIButton * listeningBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// listeningBtn.hidden = YES;//隐藏音频按钮
[listeningBtn setImage:[UIImage imageNamed:@"ic_ej"] forState:UIControlStateNormal];
[listeningBtn addTarget:self action:@selector(listeningBtnClick:) forControlEvents:UIControlEventTouchUpInside];
// [self.controlView.portraitControlView.topToolView addSubview:listeningBtn];
listeningBtn.frame = CGRectMake(kUIScreenWidth-100, kStatusBarH-2, 40, 40);
// self.controlView.portraitControlView.resolutionBtn.hidden = YES;
[self.controlView.portraitControlView.fullScreenBtn setImage:[UIImage imageNamed:@"ic_qp"] forState:UIControlStateNormal];
self.controlView.portraitControlView.playOrPauseBtn.frame = CGRectMake(100, 100, 100, 100);
self.controlView.portraitControlView.slider.frame = CGRectMake( self.controlView.portraitControlView.playOrPauseBtn.x+150, 100, 100, 10);
// [self.controlView.portraitControlView.rateBtn addTapGesture:^{
//
// NSLog(@"竖版倍速设置等待开发");
// }];
[self.view addSubview:listeningBtn];
[self.view addSubview:downLoadBtn];
[self.view bringSubviewToFront:self.backButton];
}
- (void)setupLandScapeControlViewView
{
self.controlView.landScapeControlView.titleLabel.text = self.detailModel.course_title;
// self.controlView.landScapeControlView.rateBtn.hidden = YES;
// self.controlView.landScapeControlView.resolutionBtn.hidden = YES;
// self.controlView.landScapeControlView.resolutionView.hidden = YES;
// self.controlView.landScapeControlView.downLoadBtn.hidden = YES;
self.controlView.landScapeControlView.slider.frame = CGRectMake(100, 100, 100, 100);
self.controlView.landScapeControlView.playOrPauseBtn.frame = CGRectMake(100, 100, 100, 100);
[self.controlView.landScapeControlView.backBtn setImage:[UIImage imageNamed:@"ic_back"] forState:UIControlStateNormal];
//待会改成音频 横版没有音频
// UIButton * listeningLanscapeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// listeningLanscapeBtn.frame = CGRectMake(kUIScreenHeight-kUIFitSize(110), kUIFitSize(15), kUIFitSize(35), kUIFitSize(35));
// [listeningLanscapeBtn setImage:[UIImage imageNamed:@"ic_ej"] forState:UIControlStateNormal];
// [listeningLanscapeBtn addTarget:self action:@selector(listeningBtnClick) forControlEvents:UIControlEventTouchUpInside];
// [self.controlView.landScapeControlView.topToolView addSubview:listeningLanscapeBtn];
UIButton * resolutionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
resolutionBtn.frame = CGRectMake(kUIScreenHeight-kUIFitSize(60), kUIFitSize(15), kUIFitSize(55), kUIFitSize(35));
[resolutionBtn setTitle:@"流畅" forState:UIControlStateNormal];
resolutionBtn.titleLabel.font = [UIFont systemFontOfSize:15];
[resolutionBtn addTarget:self action:@selector(resolutionBtnClick) forControlEvents:UIControlEventTouchUpInside];
[self.controlView.landScapeControlView.topToolView addSubview:resolutionBtn];
self.resolutionLandscapeBtn = resolutionBtn;
//todo 作者说布局写在内部的layousubviews,需要自己fork一份控制层代码,然后修改,但是因为还要兼容之前线上的现有版本,所以不可行,等换新的ZF的时候就可以自定义和修改了
// UIButton * nextBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// nextBtn.frame = CGRectMake(45, 35, 0, kUIFitSize(25));
// [nextBtn setImage:[UIImage imageNamed:@"ic_xh"] forState:UIControlStateNormal];
// [nextBtn addTarget:self action:@selector(nextBtnClick) forControlEvents:UIControlEventTouchUpInside];
// [self.controlView.landScapeControlView.bottomToolView addSubview:nextBtn];
UIButton * rateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
rateBtn.frame = CGRectMake(kUIScreenHeight - kUIFitSize(50),100, kUIFitSize(40), kUIFitSize(25));
[rateBtn setTitle:@"1.0X" forState:UIControlStateNormal];
rateBtn.titleLabel.font = SystemFont(kUIFitSize(15));
[rateBtn addTarget:self action:@selector(rateBtnClick) forControlEvents:UIControlEventTouchUpInside];
[self.controlView.landScapeControlView addSubview:rateBtn];
self.rateLanscapeBtn = rateBtn;
// UIButton * courseBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// courseBtn.frame = CGRectMake(kUIScreenHeight-kUIFitSize(50),100+40, kUIFitSize(40), kUIFitSize(25));
// [courseBtn setTitle:@"章节" forState:UIControlStateNormal];
// courseBtn.backgroundColor = kUIColorFromRGBA(0x000000, 0.35);
// courseBtn.layer.masksToBounds = YES;
// courseBtn.titleLabel.font = SystemFont(kUIFitSize(15));
// [courseBtn addTarget:self action:@selector(courseBtnClick) forControlEvents:UIControlEventTouchUpInside];
// [self.controlView.landScapeControlView addSubview:courseBtn];
// courseBtn.backgroundColor = [UIColor clearColor];
// self.landscapeCourseBtn = courseBtn;
[self.controlView.landScapeControlView addSubview:self.rateSuperView];
[self.controlView.landScapeControlView addSubview:self.resolutionSuperView];
[self.controlView.landScapeControlView addSubview:self.courseSuperView];
[self.courseSuperView addSubview:self.listTableView];
self.courseSuperView.hidden = YES;
[self.view bringSubviewToFront:self.courseSuperView];
// [self.controlView.landScapeControlView addSubview:self.moreSuperView];
}
- (void)backActionAction
{
[self.navigationController popViewControllerAnimated:YES];
self.isPresent = @"0";
self.player.viewControllerDisappear = YES;
[self pauseTimer];
[self removeTimerFromSelf];
self.player.pauseWhenAppResignActive = YES;
self.player.pauseByEvent = YES;
[self.player.currentPlayerManager pause];
[self.player stop];
[self.moviePlayerView removeFromSuperview];
self.moviePlayerView = nil;
[self.player.currentPlayerManager stop];
self.player = nil;
}
#pragma mark 进入音频
- (void)listeningBtnClick:(UIButton *)sender
{
[MobClick event:@"v4_ios_learn_audio"];
if (self.currentLearnModel.mp3_url.length) {
[self listeningBtn:self.currentLearnModel];
}
else
{
[MBProgressHUD showText:@"当前课程没有音频哦"];
}
}
- (void)listeningBtn:(LMSNewLectureModel *)model
{
self.listeningV416View.frame = CGRectMake(0, 0, kUIScreenWidth, kUIFitSize(192));
self.player.assetURL = [NSURL URLWithString:model.mp3_url];
self.audioTitleLabel.text = self.currentLearnModel.lecture_title;
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (model.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [model.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((model.lecture_length.intValue - model.last_learn.intValue)>10) {
NSInteger lastSexond = [model.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
self.listeningV416View.hidden = false;
[self.listeningV416View bringSubviewToFront:self.listeningV416bgImageV];
self.controlView.portraitControlView.currentTimeLabel.frame = CGRectMake(0, kUIFitSize(192)-40, 100, 24);
self.controlView.portraitControlView.totalTimeLabel.frame = CGRectMake(kUIScreenWidth-100, kUIFitSize(192)-40, 70, 24);
self.controlView.portraitControlView.slider.frame = CGRectMake(90, kUIFitSize(192)-40, kUIScreenWidth-180, 24);;
[self.listeningV416View addSubview:self.controlView.portraitControlView.currentTimeLabel];
[self.listeningV416View addSubview:self.controlView.portraitControlView.totalTimeLabel];
[self.listeningV416View addSubview:self.controlView.portraitControlView.slider];
[self.listeningV416View bringSubviewToFront:self.controlView.portraitControlView.slider];
[self.listeningV416View bringSubviewToFront:self.controlView.portraitControlView.currentTimeLabel];
[self.listeningV416View bringSubviewToFront:self.controlView.portraitControlView.totalTimeLabel];
self.player.pauseWhenAppResignActive = false;
self.isPlay = @"1";
// [self.view setNeedsLayout];
//
// [self.view layoutIfNeeded];
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
NSLog(@"___________%@",self.controlView.portraitControlView.slider);
}
#pragma mark 音频播放
- (void)yinpinnextNoti
{
NSInteger index = 0;
for (int i = 0; i <self.allListAry.count; i++) {
LMSNewLectureModel *lectModel = self.allListAry[i];
if ([self.currentLearnModel.lecture_id isEqualToString:lectModel.lecture_id]) {
index = i;
}
}
if (index != self.allListAry.count - 1) {
self.currentLearnModel.isLearning = NO;
LMSNewLectureModel *currentModel = self.allListAry[index + 1];
currentModel.isLearning = YES;
NSDictionary *dic = [self onereturnToDictionaryWithModel:currentModel];
[[NSNotificationCenter defaultCenter]postNotificationName:KChangeNextPlay object:dic];
// self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
[[NSNotificationCenter defaultCenter] postNotificationName:KChangeReallyJiangyiNotifition object:dic];
if (currentModel.mp3_url.length) {
[self listeningBtn:currentModel];
}
else if (currentModel.mp4_url.length) {
self.listeningV416View.hidden = YES;
self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (currentModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((currentModel.lecture_length.intValue - currentModel.last_learn.intValue)>10) {
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
return;
}
else if (currentModel.document_id.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = currentModel;
baiduVC.detailModel = self.detailModel;
[self.navigationController pushViewController:baiduVC animated:YES];
}
else if (currentModel.link.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = currentModel.link;
webVC.titleStr = @"课程详情";
[self acqucireRecordServiceProgress:100 curpage:0];
[self.navigationController pushViewController:webVC animated:YES];
}
else
{
[MBProgressHUD showText:@"没有对应的视频文件"];
}
currentModel.isLearning = YES;
self.currentLearnModel = currentModel;
[self.controlView showTitle:currentModel.lecture_title coverURLString:@"https://f3-md.veimg.cn/meadincms/1/2018/0104/151455928.jpg" fullScreenMode:SZFullScreenModeLandscape];
// [self changeModel];//这是云课堂的置顶,这个里面暂时不需要
}else{//没有下一节了
// [self.player stop];
// self.replaytestlandView.hidden = false;
// self.replaytestPorView.hidden = false;
// [self.controlView.landScapeControlView bringSubviewToFront:self.replaytestlandView];
[MBProgressHUD showText:@"这已经是最后一节了" duration:2];
}
}
- (void)yinpinPrexNoti
{
NSInteger index = 0;
for (int i = 0; i <self.allListAry.count; i++) {
LMSNewLectureModel *lectModel = self.allListAry[i];
if ([self.currentLearnModel.lecture_id isEqualToString:lectModel.lecture_id]) {
index = i;
}
}
if (index != 0) {
self.currentLearnModel.isLearning = NO;
LMSNewLectureModel *currentModel = self.allListAry[index - 1];
currentModel.isLearning = YES;
NSDictionary *dic = [self onereturnToDictionaryWithModel:currentModel];
[[NSNotificationCenter defaultCenter]postNotificationName:KChangeNextPlay object:dic];
[[NSNotificationCenter defaultCenter] postNotificationName:KChangeReallyJiangyiNotifition object:dic];
if (currentModel.mp4_url.length) {
self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (currentModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((currentModel.lecture_length.intValue - currentModel.last_learn.intValue)>10) {
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
return;
}
if (currentModel.mp3_url.length) {
[self listeningBtn:currentModel];
}
if (currentModel.document_id.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = currentModel;
baiduVC.detailModel = self.detailModel;
[self.navigationController pushViewController:baiduVC animated:YES];
}
if (currentModel.link.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = currentModel.link;
webVC.titleStr = @"课程详情";
[self acqucireRecordServiceProgress:100 curpage:0];
[self.navigationController pushViewController:webVC animated:YES];
}
currentModel.isLearning = YES;
self.currentLearnModel = currentModel;
[self.controlView showTitle:currentModel.lecture_title coverURLString:@"https://f3-md.veimg.cn/meadincms/1/2018/0104/151455928.jpg" fullScreenMode:SZFullScreenModeLandscape];
// [self changeModel];//这是云课堂的置顶,这个里面暂时不需要
}else{//没有下一节了
// [self.player stop];
// self.replaytestlandView.hidden = false;
// self.replaytestPorView.hidden = false;
// [self.controlView.landScapeControlView bringSubviewToFront:self.replaytestlandView];
[MBProgressHUD showText:@"这就是第一节" duration:2];
}
}
- (void)changeCurrentModel
{
}
#pragma mark - 播放下一节(自动播放 || 手动点击)
-(void)playNext{
///TODO:播放下一节
NSInteger index = 0;
for (int i = 0; i <self.allListAry.count; i++) {
LMSNewLectureModel *lectModel = self.allListAry[i];
if ([self.currentLearnModel.lecture_id isEqualToString:lectModel.lecture_id]) {
index = i;
}
}
if (index != self.allListAry.count - 1) {
self.currentLearnModel.isLearning = NO;
LMSNewLectureModel *currentModel = self.allListAry[index + 1];
currentModel.isLearning = YES;
NSDictionary *dic = [self onereturnToDictionaryWithModel:currentModel];
[[NSNotificationCenter defaultCenter]postNotificationName:KChangeNextPlay object:dic];
// self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
if ([self.player.assetURL.absoluteString containsString:@".mp3"]||[self.player.assetURL.absoluteString containsString:@".mp4"]) {
if ([self.player.assetURL.absoluteString containsString:@".mp4"]) {
if (currentModel.mp4_url.length) {
self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
self.listeningV416View.hidden = YES;
}
else {
[self listeningBtn:currentModel];
self.listeningV416View.hidden = false;
self.playerManager.rate = 1;
}
}
else
{
if (currentModel.mp3_url.length) {
[self listeningBtn:currentModel];
self.listeningV416View.hidden = false;
self.playerManager.rate = 1;
}
else {
self.player.assetURL = [NSURL URLWithString:currentModel.mp4_url];
self.listeningV416View.hidden = YES;
}
}
}
if (currentModel.document_id.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = currentModel;
baiduVC.detailModel = self.detailModel;
[self.navigationController pushViewController:baiduVC animated:YES];
}
if (currentModel.link.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = currentModel.link;
webVC.titleStr = @"课程详情";
[self acqucireRecordServiceProgress:100 curpage:0];
[self.navigationController pushViewController:webVC animated:YES];
}
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (currentModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((currentModel.lecture_length.intValue - currentModel.last_learn.intValue)>10) {
NSInteger lastSexond = [currentModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
currentModel.isLearning = YES;
self.currentLearnModel = currentModel;
[self.controlView showTitle:currentModel.lecture_title coverURLString:@"https://f3-md.veimg.cn/meadincms/1/2018/0104/151455928.jpg" fullScreenMode:SZFullScreenModeLandscape];
// [self changeModel];//这是云课堂的置顶,这个里面暂时不需要
}else{//没有下一节了
// [self.player stop];
// self.replaytestlandView.hidden = false;
// self.replaytestPorView.hidden = false;
// [self.controlView.landScapeControlView bringSubviewToFront:self.replaytestlandView];
[MBProgressHUD showText:@"这已经是最后一节了" duration:2];
}
}
#pragma mark - Timer
-(void)addTimerInSelf
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:[WeakProxy proxyWithTarget:self] selector:@selector(timerScroll) userInfo:nil repeats:YES];
}
-(void)beginTimer
{
if (self.timer != nil)
{
[self.timer setFireDate:[NSDate distantPast]];
}
}
-(void)timerScroll
{
if (self.timer != nil)
{
self.viewTime ++;
if (self.viewTime >0 && self.viewTime%(self.detailModel.study_configModel.cheating_time.intValue) == 0) {
switch (self.player.isFullScreen) {
case 0:
{
if ([self.player.assetURL.absoluteString hasSuffix:@"mp3"]) {
[self.startAudioBtn setImage:[UIImage imageNamed:@"ic_bf_yp"] forState:UIControlStateNormal];
}
[self portraitcheatingtimeAction];
}
break;
default:
{
[self lanscapecheatingtimeAction];
}
break;
}
[self pauseTimer];
[self.player.currentPlayerManager pause];
}
if (self.viewTime > 0 && self.viewTime % 120 == 0) {
// 每2分钟保存一次进度
[self acquireSecondToSaveIsPop:NO];
}
if (self.viewTime > 0 && self.viewTime % 60 == 0) {
// 每1分钟保存一次时长
[self acquireSecondToSaveTotolTimeIsPop:NO];
}
}
MyLog(@"%zi", self.viewTime);
}
- (void)portraitcheatingtimeAction
{
WS(weakself)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0,0, 0)];
JKAlertView *alertView = [JKAlertView alertViewWithTitle:@"您还在线吗" message:@"" style:(JKAlertStylePlain)];
// 显示title和message之间的分隔线
alertView.setPlainTitleMessageSeparatorHidden(NO, 0);
// 设置YES表示仅自定义message
alertView.setCustomPlainTitleView(YES, ^UIView *(JKAlertView *view) {
return label;
});
[alertView addAction:[JKAlertAction actionWithTitle:@"继续播放" style:(JKAlertActionStyleDefault) handler:^(JKAlertAction *action) {
}]];
alertView.enableDeallocLog(YES).show().setDismissComplete(^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.75 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakself beginTimer];
[weakself.player.currentPlayerManager play];
if ([weakself.player.assetURL.absoluteString hasSuffix:@"mp3"]) {
[weakself.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
}
});
});
}
- (void)lanscapecheatingtimeAction
{
WS(weakself)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0,0, 0)];
// // label.backgroundColor = [UIColor orangeColor];
// label.textAlignment = NSTextAlignmentCenter;
// label.text = @"我是自定义的view~~";
// label.attributedText = [[NSAttributedString alloc] initWithString:@"我是自定义的view~~" attributes:@{NSForegroundColorAttributeName : [UIColor redColor]}];
JKAlertView *alertView = [JKAlertView alertViewWithTitle:@"您还在线吗" message:@"" style:(JKAlertStylePlain)];
// 显示title和message之间的分隔线
alertView.setPlainTitleMessageSeparatorHidden(NO, 0);
// 设置YES表示仅自定义message
alertView.setCustomPlainTitleView(YES, ^UIView *(JKAlertView *view) {
return label;
});
UIView *linshiView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
linshiView.transform = CGAffineTransformMakeRotation(M_PI/2);
[[UIApplication sharedApplication].keyWindow addSubview:linshiView];
linshiView.frame = CGRectMake(0, 0, SCREEN_HEIGHT,SCREEN_WIDTH );
alertView.setCustomSuperView(linshiView);
[alertView addAction:[JKAlertAction actionWithTitle:@"继续播放" style:(JKAlertActionStyleDefault) handler:^(JKAlertAction *action) {
}]];
alertView.enableDeallocLog(YES).show().setDismissComplete(^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.75 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakself beginTimer];
[weakself.player.currentPlayerManager play];
[linshiView removeFromSuperview];
});
});
}
-(void)pauseTimer
{
if (self.timer != nil)
{
[self.timer setFireDate:[NSDate distantFuture]];
}
}
-(void)removeTimerFromSelf
{
if (self.timer != nil)
{
[self.timer invalidate];
self.timer= nil;
}
}
#pragma mark - UIApplication Notification Handle
- (void)applicationWillEnterForeground:(NSNotification *)notification
{
#ifdef DEBUG
MyLog(@"%s",__PRETTY_FUNCTION__);
#endif
[self beginTimer];
MyLog(@" +++ %ld",(long)self.viewTime);
}
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
#ifdef DEBUG
MyLog(@"%s",__PRETTY_FUNCTION__);
#endif
[self acquireSecondToSaveIsPop:NO];
[self pauseTimer];
MyLog(@" --- %ld",(long)self.viewTime);
}
- (UIStatusBarStyle)preferredStatusBarStyle {
if (self.player.isFullScreen) {
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
- (BOOL)prefersStatusBarHidden {
return self.player.isStatusBarHidden;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
return UIStatusBarAnimationSlide;
}
- (BOOL)shouldAutorotate {
return self.player.shouldAutorotate;
}
// 返回值要必须为YES
//- (BOOL)shouldAutorotate {
// return YES;
//}
//支持的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
if (self.player.isFullScreen) {
return UIInterfaceOrientationMaskLandscape;
}
return UIInterfaceOrientationMaskPortrait;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
//保存播放进度
-(void)acquireSecondToSaveIsPop:(BOOL)isPop
{
WS(weakSelf);
//获取已经播放的时间
NSTimeInterval currentTimeSec = self.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = self.player.totalTime;
//todowh注释掉之前的 准备写保存进度
// if (_course.course_type == 1) {//先之课程
// [self savePlayRecord:currentTimeSec
// lecture:self.currentLearnModel
// complete:^{
// [MBProgressHUD hideHUDForView:weakSelf.view animated:YES];
// if (isPop == YES)
// {
// [weakSelf.navigationController popViewControllerAnimated:YES];
// }
// }];
// }else{
//
// [self updateSelfCoursePlayRecordWithPlaytime:currentTimeSec totalTime:totalTimeSec ispop:isPop];
// }
NSInteger progress =ceil((currentTimeSec / totalTimeSec)*100);
NSInteger current = round(currentTimeSec);
[self acqucireRecordServiceProgress:progress curpage:current];
}
//保存播放时长
-(void)acquireSecondToSaveTotolTimeIsPop:(BOOL)isPop
{
WS(weakSelf);
//获取已经播放的时间
NSTimeInterval currentTimeSec = self.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = self.player.totalTime;
NSInteger progress =ceil((currentTimeSec / totalTimeSec)*100);
NSInteger current = round(currentTimeSec);
[self acqutireTimeRecordLast_learn:current];
}
#pragma mark -
- (void)segmentStyle {
WS(weakself)
self.segHead = [[MLMSegmentHead alloc] initWithFrame:CGRectMake(0, kUIFitSize(192), kUIScreenWidth, SEGMENTHEIGHT) titles:self.titleAry headStyle:SegmentHeadStyleLine layoutStyle:MLMSegmentLayoutDefault];
self.segHead.fontScale = 1.0;
self.segHead.deSelectColor =RGBAColor(9, 21, 34, 0.85);
self.segHead.selectColor = kUIColorFromRGB(0x0085FE);
self.segHead.lineColor = kUIColorFromRGB(0x0085FE);
self.segHead.headColor = [UIColor whiteColor];
self.segHead.lineHeight = 2;
self.segHead.lineScale = 0.5;
self.segScroll = [[MLMSegmentScroll alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.segHead.frame)+SEGMENTHEIGHT-ADJUSTHEIGHT, kUIScreenWidth, kUIScreenHeight-CGRectGetMaxY(self.segHead.frame)-SEGMENTHEIGHT+kStatusBarH) vcOrViews:[self vcArr:self.keysAry]];//
self.segScroll.loadAll = YES;
[MLMSegmentManager associateHead:self.segHead withScroll:self.segScroll completion:^{
[weakself.view addSubview:weakself.segHead];
[weakself.view addSubview:weakself.segScroll];
}];
// self.view.backgroundColor = [UIColor redColor];
}
#pragma mark 接受学习通知
- (void)kaishixuexiNoti
{
[self acquireReloadNetWorking];
[self.segHead setSelectIndex:1];
[self.segScroll setShowIndex:1];
}
#pragma mark - 数据源
- (NSArray *)vcArr:(NSArray *)keysAry {
NSMutableArray *arr = [NSMutableArray array];
if ([self.urlStr containsString:@"company-course"]) {
for (NSInteger i = 1; i <= 3; i ++) {
if (i == 1) {
LMSNewLearnJoinDetailVC *investVC = [[LMSNewLearnJoinDetailVC alloc]init];
investVC.detailModel = self.detailModel ;
[arr addObject:investVC];
}
if (i == 2) {
LMSNewClassLearnCatalogVC *planVC = [[LMSNewClassLearnCatalogVC alloc]initWithNibName:@"LMSNewClassLearnCatalogVC" bundle:nil];
planVC.chapterArray = self.detailModel.chapterMArr;
planVC.allLectureList = self.allListAry;
planVC.currectModel = self.currentLearnModel;
planVC.detailModel = self.detailModel;
[arr addObject:planVC];
}
}
} else {
for (NSInteger i = 1; i <= 3; i ++) {
if (i == 1) {
LMSNewLearnJoinDetailVC *investVC = [[LMSNewLearnJoinDetailVC alloc]init];
investVC.isMadeByXianzhi = YES;
investVC.detailModel = self.detailModel ;
[arr addObject:investVC];
}
if (i == 2) {
LMSNewClassLearnCatalogVC *planVC = [[LMSNewClassLearnCatalogVC alloc]initWithNibName:@"LMSNewClassLearnCatalogVC" bundle:nil];
planVC.chapterArray = self.detailModel.chapterMArr;
planVC.allLectureList = self.allListAry;
planVC.currectModel = self.currentLearnModel;
planVC.detailModel = self.detailModel;
[arr addObject:planVC];
}
if (i == 3)
{
LMSNewClassLearnJiangyiVCViewController *jiangyiVC = [[LMSNewClassLearnJiangyiVCViewController alloc]init];
jiangyiVC.introduce = self.detailModel.introduce;
jiangyiVC.detailModel = self.detailModel;
[arr addObject:jiangyiVC];
[MobClick event:@"v4_ios_learn_handout"];
}
}
}
return arr;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark------获取课程详情
- (void)handleService
{
WS(weakself)
NSDictionary *parameters = @{@"token":kUserToken
};
//todo @"client/plan/course/21676"
WS(weakSelf)
[[LMSNewAPIClient apiManager] getRequestAPI:[NSString stringWithFormat:@"%@%@",self.urlStr,self.relationID] parameters:parameters success:^(NSURLSessionDataTask *dataTask, id JSON) {
MyLog(@"%@", JSON);
weakself.detailModel = [LMSNewLearnDetailModel mj_objectWithKeyValues:JSON[@"data"]];
if([weakself.detailModel.chapterMArr.firstObject isNotNullOrEmpty] == NO) {
// return;
}
weakself.detailModel.chapterModel = weakself.detailModel. chapterMArr.firstObject;
[weakself segmentStyle];
// [self addDownloadTask:self.detailModel]; //
for (int i = 0; i <self.detailModel.chapterMArr.count; i++) {
LMSNewLectureChapterModel *chapModel = weakself.detailModel.chapterMArr[i];
for (int j = 0; j < chapModel.lectureMArr.count; j++) {
if (chapModel.lectureMArr.count) {
[self.allListAry addObject:chapModel.lectureMArr[j]];
}
}
}
self.currentLearnModel = self.allListAry.count > 0 ? self.allListAry[0] : nil;
[self.moviePlayerView sd_setImageWithURL:[NSURL URLWithString:self.detailModel.course_picture] placeholderImage:[UIImage imageNamed:@"videoCoverImage"]];
if ([self.fromType isEqualToString:KPlayLastLearn]) {
[[NSNotificationCenter defaultCenter] postNotificationName:KPlayLastLearn object:nil];
[self.segHead setSelectIndex:1];
[self.segScroll setShowIndex:1];
}
if([JSON[@"status"] integerValue] == 1) {
if(weakSelf.isShowDownloadMore) {//下载更多展示
weakSelf.isPresent = @"1";
if([[NSUserDefaults standardUserDefaults] boolForKey:kSettingIsUseDataWatchCourse] == NO && [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN) {//蜂窝网络且不允许流量下载
[weakSelf WWANNetworkingDownloadAler];
} else {
LMSNDownloadMenuViewContorller *vc = [[LMSNDownloadMenuViewContorller alloc] initWithModel:weakSelf.detailModel courType:weakSelf.urlStr];
vc.catcheManageClouse = ^{
LMSNMyDownloadVC *vc = [LMSNMyDownloadVC new];
[weakSelf.navigationController pushViewController:vc animated:false];
};
LNavigationViewController *nav = [[LNavigationViewController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[weakSelf presentViewController:nav animated:false completion:nil];
}
}
}
} failure:^(NSURLSessionDataTask *dataTask, NSError *error) {
}];
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
//#pragma mark -ZFLandScapeControlViewDelegate
//- (void)ZFLandScapeControlViewDownloadVideoAction:(UIButton *)sender
//{
// [self ZFPortraitControlViewDownloadVideoAction:sender];
//}
//- (void)ZFLandScapeControlViewResolutionAction:(UIButton *)sender
//{
// [self ZFPortraitControlViewresolutionAction:sender];
//}
//- (void)ZFLandScapeControlViewRateAction:(UIButton *)sender
//{
// [self ZFPortraitControlViewRateAction:sender];
//}
- (SZPlayerControlView *)controlView {
if (!_controlView) {
_controlView = [SZPlayerControlView new];
// _controlView.portraitControlView.delegate = self;
// _controlView.landScapeControlView.delegate = self;
}
return _controlView;
}
- (void)loadView {
[super loadView];
_moviePlayerView = [[UIImageView alloc]init];
[self.view addSubview:_moviePlayerView];
_moviePlayerView.frame = CGRectMake(0, 0, kUIScreenWidth, kUIFitSize(192));
// _moviePlayerView.backgroundColor = [UIColor colorWithRed:170 / 255.0 green:170 / 255.0 blue:170 / 255.0 alpha:1.0];
}
#pragma mark changePlayState
- (void)changePlayState:(NSNotification *)sender
{
BOOL isnumber = [[NSUserDefaults standardUserDefaults] boolForKey:kSettingIsUseDataWatchCourse];
if (!isnumber) {
[self getCurrentNetworkState:sender];
}
else
{
LMSNewLectureModel *learnModel = [LMSNewLectureModel mj_objectWithKeyValues:sender.object];
self.currentLearnModel = learnModel;
if (self.player.assetURL.absoluteString.length) {
}
else
{
if (learnModel.mp4_url.length) {
[self videoBtnClick];
[self removeTimerFromSelf];
[self addTimerInSelf];
self.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.mp3_url.length) {
[self listeningBtn:learnModel];
[self removeTimerFromSelf];
[self addTimerInSelf];
[self.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
self.isPlay = @"1";
self.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.document_id.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = learnModel;
baiduVC.detailModel = self.detailModel;
[self.navigationController pushViewController:baiduVC animated:YES];
}
else if (learnModel.link.length) {
self.isPresent = @"1";
[self pauseTimer];
[self.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = learnModel.link;
webVC.titleStr = @"课程详情";
[self acqucireRecordServiceProgress:100 curpage:0];
[self.navigationController pushViewController:webVC animated:YES];
}
else
{
[MBProgressHUD showText:@"没有对应的视频文件"];
}
}
}
}
- (void)getCurrentNetworkState:(NSNotification *)sender
{
WS(weakself)
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -1:
NSLog(@"未知网络");
break;
case 0:
NSLog(@"网络不可达");
break;
case 1:
{
NSLog(@"GPRS网络");
[weakself inditatorLiuliangMethod:sender];
[[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"1" userInfo:nil];
}
break;
case 2:
{
NSLog(@"wifi网络");
LMSNewLectureModel *learnModel = [LMSNewLectureModel mj_objectWithKeyValues:sender.object];
weakself.currentLearnModel = learnModel;
if (learnModel.mp4_url.length) {
[weakself videoBtnClick];
weakself.player.assetURL = [NSURL URLWithString:learnModel.mp4_url];
weakself.player.pauseWhenAppResignActive = YES;
if ([weakself.urlStr containsString:@"company-course"]) {//自制课程
if (learnModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [learnModel.last_learn integerValue];
[weakself.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((learnModel.lecture_length.intValue - learnModel.last_learn.intValue)>10) {
NSInteger lastSexond = [learnModel.last_learn integerValue];
[weakself.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
// weakself.listeningV416View.hidden = YES;
[weakself removeTimerFromSelf];
[weakself addTimerInSelf];
weakself.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.mp3_url.length) {
[weakself listeningBtn:self.currentLearnModel];
[weakself removeTimerFromSelf];
[weakself addTimerInSelf];
[self.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
self.isPlay = @"1";
weakself.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.document_id.length) {
weakself.isPresent = @"1";
[weakself pauseTimer];
[weakself.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = learnModel;
baiduVC.detailModel = weakself.detailModel;
[weakself.navigationController pushViewController:baiduVC animated:YES];
}
else if (learnModel.link.length) {
weakself.isPresent = @"1";
[weakself pauseTimer];
[weakself.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = learnModel.link;
webVC.titleStr = @"课程详情";
[weakself acqucireRecordServiceProgress:100 curpage:0];
[weakself.navigationController pushViewController:webVC animated:YES];
}
else
{
[MBProgressHUD showText:@"没有对应的视频文件"];
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"2" userInfo:nil];
}
break;
default:
break;
}
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
NSLog(@"有网");
}else{
NSLog(@"没网");
}
}];
}
#pragma mark-------蜂窝网络下载提示
- (void)WWANNetworkingDownloadAler {
WS(weakSelf)
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"当前非Wi-Fi环境,继续下载会使用您的数据流量" message:@"" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"流量下载" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
LMSNDownloadMenuViewContorller *vc = [[LMSNDownloadMenuViewContorller alloc] initWithModel:weakSelf.detailModel courType:weakSelf.urlStr];
vc.catcheManageClouse = ^{
LMSNMyDownloadVC *vc = [LMSNMyDownloadVC new];
[weakSelf.navigationController pushViewController:vc animated:false];
};
LNavigationViewController *nav = [[LNavigationViewController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[weakSelf presentViewController:nav animated:false completion:nil];
}];
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
}];
[cancelAction setValue:kUIColorFromRGBA(0x091522, 0.55) forKey:@"titleTextColor"];
[alert addAction:cancelAction];
[alert addAction:defaultAction];
[self presentViewController:alert animated:false completion:nil];
}
- (void)inditatorLiuliangMethod:(NSNotification *)sender
{
WS(weakSelf)
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"当前非Wi-Fi环境,继续播放会使用您的数据流量" message:@"" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"流量播放" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
if (weakSelf.player.assetURL.absoluteString.length) {
//如果当前正在播放就啥也不干,如果当前没有播放的 就意味是第一次 正常播放就行
}
else
{
LMSNewLectureModel *learnModel = [LMSNewLectureModel mj_objectWithKeyValues:sender.object];
self.currentLearnModel = learnModel;
if (learnModel.mp4_url.length) {
weakSelf.player.assetURL = [NSURL URLWithString:learnModel.mp4_url];
weakSelf.player.pauseWhenAppResignActive = YES;
if ([weakSelf.urlStr containsString:@"company-course"]) {//自制课程
if (learnModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [learnModel.last_learn integerValue];
[weakSelf.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((learnModel.lecture_length.intValue - learnModel.last_learn.intValue)>10) {
NSInteger lastSexond = [learnModel.last_learn integerValue];
[weakSelf.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
weakSelf.listeningV416View.hidden = YES;
[weakSelf removeTimerFromSelf];
[weakSelf addTimerInSelf];
weakSelf.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.mp3_url.length) {
self.listeningV416View.frame = CGRectMake(0, 0, kUIScreenWidth, kUIFitSize(192));
self.player.assetURL = [NSURL URLWithString:learnModel.mp3_url];
NSTimeInterval currentTime = self.playerManager.currentTime;
[weakSelf.playerManager seekToTime:currentTime completionHandler:^(BOOL finished) {
}];
weakSelf.listeningV416View.hidden = false;
[weakSelf.listeningV416View bringSubviewToFront:weakSelf.listeningV416bgImageV];
weakSelf.controlView.portraitControlView.currentTimeLabel.frame = CGRectMake(0, kUIFitSize(192)-40, 100, 24);
weakSelf.controlView.portraitControlView.totalTimeLabel.frame = CGRectMake(kUIScreenWidth-100, kUIFitSize(192)-40, 70, 24);
weakSelf.controlView.portraitControlView.slider.frame = CGRectMake(90, kUIFitSize(192)-40, kUIScreenWidth-180, 24);;
[weakSelf.listeningV416View addSubview:weakSelf.controlView.portraitControlView.currentTimeLabel];
[weakSelf.listeningV416View addSubview:weakSelf.controlView.portraitControlView.totalTimeLabel];
[weakSelf.listeningV416View addSubview:weakSelf.controlView.portraitControlView.slider];
[weakSelf.listeningV416View bringSubviewToFront:weakSelf.controlView.portraitControlView.slider];
[weakSelf.listeningV416View bringSubviewToFront:weakSelf.controlView.portraitControlView.currentTimeLabel];
[weakSelf.listeningV416View bringSubviewToFront:weakSelf.controlView.portraitControlView.totalTimeLabel];
weakSelf.player.pauseWhenAppResignActive = false;
weakSelf.isPlay = @"1";
[weakSelf removeTimerFromSelf];
[weakSelf addTimerInSelf];
weakSelf.viewTime = 0;//初始化本次播放时间
}
else if (learnModel.document_id.length) {
weakSelf.isPresent = @"1";
[weakSelf pauseTimer];
[weakSelf.player.currentPlayerManager pause];
LMSNewBaiduReaderVC *baiduVC = [[LMSNewBaiduReaderVC alloc]init];
baiduVC.lectureModel = learnModel;
baiduVC.detailModel = weakSelf.detailModel;
[weakSelf.navigationController pushViewController:baiduVC animated:YES];
}
else if (learnModel.link.length) {
weakSelf.isPresent = @"1";
[weakSelf pauseTimer];
[weakSelf.player.currentPlayerManager pause];
LMSNewWebVC *webVC = [[LMSNewWebVC alloc] init];
webVC.urlStr = learnModel.link;
webVC.titleStr = @"课程详情";
[weakSelf acqucireRecordServiceProgress:100 curpage:0];
[weakSelf.navigationController pushViewController:webVC animated:YES];
}
else
{
[MBProgressHUD showText:@"没有对应的视频文件"];
}
}
}];
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
[weakSelf pauseTimer];
[weakSelf.player.currentPlayerManager pause];
}];
[cancelAction setValue:kUIColorFromRGBA(0x091522, 0.55) forKey:@"titleTextColor"];
[alert addAction:cancelAction];
[alert addAction:defaultAction];
[weakSelf presentViewController:alert animated:YES completion:^{
}];
}
#pragma mark 移除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[_timer invalidate];
NSLog(@"VC销毁了");
}
- (void)resolutionBtnClick
{
self.resolutionSuperView.hidden = NO;
}
//章节
- (void)courseBtnClick
{
self.courseSuperView.hidden = NO;
[self.listTableView reloadData];
[self.listTableView reloadData];
}
//倍速Action
- (void)rateBtnClick
{
self.rateSuperView.hidden = false;
}
-(UITableView *)listTableView{
if (!_listTableView) {
self.listTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kUIFitSize(381), kUIScreenWidth) style:UITableViewStylePlain];
_listTableView.backgroundColor = [UIColor blackColor];
_listTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return _listTableView;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.detailModel.study_configModel.can_learn_lecture.intValue!= 0) {
self.courseSuperView.hidden = YES;
LMSNewLectureChapterModel *chapterModel = self.detailModel.chapterMArr[indexPath.section];
LMSNewLectureModel *lectureModel = chapterModel.lectureMArr[indexPath.row];
lectureModel.isLearning = YES;
self.currentLearnModel = lectureModel;
NSDictionary *dic = [self onereturnToDictionaryWithModel:lectureModel];
[[NSNotificationCenter defaultCenter] postNotificationName:KChangeNextPlay object:dic];
self.player.assetURL = [NSURL URLWithString:lectureModel.mp4_url];
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (self.currentLearnModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [self.currentLearnModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((self.currentLearnModel.lecture_length.intValue - self.currentLearnModel.last_learn.intValue)>10) {
NSInteger lastSexond = [self.currentLearnModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
}
else
{
if (self.detailModel.study_configModel.time_status.intValue == 3) {
[MBProgressHUD showText:@"课程已过期,无法继续学习"];
}
else
{
[MBProgressHUD showText:@"当前视频还不可以学习哦"];
}
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"LMSNewLearnBaseListTableViewCell" owner:self options:nil];
LMSNewLearnBaseListTableViewCell *cell = [nibs firstObject];
LMSNewLectureChapterModel *chapterModel = self.detailModel.chapterMArr[indexPath.section];
LMSNewLectureModel *lectureModel = chapterModel.lectureMArr[indexPath.row];
cell.titleLabel.text = lectureModel.lecture_title;
if ([lectureModel.lecture_id isEqualToString:self.currentLearnModel.lecture_id]) {
cell.titleLabel.textColor = kUIColorFromRGB(0x0085FE);
}
else
{
cell.titleLabel.textColor = kUIColorFromRGB(0xffffff);
}
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.detailModel.chapterMArr.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
LMSNewLectureChapterModel *chapterModel = self.detailModel.chapterMArr[section];
if (chapterModel.shouldFolder) {
return 0;
}
else
{
return chapterModel.lectureMArr.count;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 140;
}
//cell button点击事件
- (void)listcellBtnClick:(UIButton *)sender
{
// self.currentModel.isLearing = NO;
self.courseSuperView.hidden = YES;
CGPoint point = sender.center;
point = [self.listTableView convertPoint:point fromView:sender.superview];
NSIndexPath* indexPath = [self.listTableView indexPathForRowAtPoint:point];
LMSNewLectureChapterModel *chapterModel = self.detailModel.chapterMArr[indexPath.section];
LMSNewLectureModel*lectureModel = chapterModel.lectureMArr[indexPath.row];
lectureModel.isLearning = YES;
self.player.assetURL = [NSURL URLWithString:lectureModel.mp4_url];
NSInteger dragedSeconds = [lectureModel.last_learn integerValue];
self.playerManager.seekTime =dragedSeconds;
self.player.assetURL = [NSURL URLWithString:lectureModel.mp4_url.length?lectureModel.mp4_url:lectureModel.mp4_url];
// self.player.assetURL =[NSURL URLWithString:@"http://api.9first.com/test.mp3"];//音频测试
[self.controlView showTitle:lectureModel.lecture_title coverURLString:@"https://upload-images.jianshu.io/upload_images/635942-14593722fe3f0695.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" fullScreenMode:SZFullScreenModeLandscape];
self.currentLearnModel = lectureModel;
[self.listTableView reloadData];
if (lectureModel.mp4_url.length >0 ) {
self.resolutionSuperView.hidden = false;
}
else
{
self.resolutionSuperView.hidden = YES;
}
// [self changeModel];
MyLog(@"132");
}
- (UIView *)rateSuperView
{
if (!_rateSuperView) {
_rateSuperView = [[UIView alloc]initWithFrame:CGRectMake(kUIScreenHeight-kUIFitSize(315), 0, kUIFitSize(315), kUIScreenWidth)];
_rateSuperView.hidden = YES;
_rateSuperView.backgroundColor = kUIColorFromRGBA(0x000000, 0.7);
NSArray * rateTitleArray = @[@"1.0X", @"1.25X", @"1.5X", @"2.0X"];
// 倍速父视图上边的Btn
for (NSInteger i = 0 ; i < rateTitleArray.count; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btn.layer.borderColor = [UIColor clearColor].CGColor;
btn.layer.borderWidth = 1;
btn.layer.cornerRadius = kUIFitSize(5);
btn.layer.masksToBounds = YES;
btn.tag = 3000+i;
btn.frame = CGRectMake(kUIFitSize(96), kUIFitSize(80)+ kUIFitSize(35+25)*i, kUIFitSize(123), kUIFitSize(35));
btn.titleLabel.font = [UIFont systemFontOfSize:kUIFitSize(20)];
[btn setTitle:rateTitleArray[i] forState:UIControlStateNormal];
if ([rateTitleArray[i] isEqualToString:self.rateLanscapeBtn.titleLabel.text]) {//设置当前选中按钮
self.rateLanscapeCurrentBtn = btn;
btn.selected = YES;
btn.layer.borderColor = kUIColorFromRGB(0x0A93FF).CGColor;
[btn setTitleColor:kUIColorFromRGB(0x0A93FF) forState:UIControlStateNormal];
}
[self.rateSuperView addSubview:btn];
[btn addTarget:self
action:@selector(changeRate:)
forControlEvents:UIControlEventTouchUpInside];
}
}
return _rateSuperView;
}
- (UIView *)resolutionSuperView
{
if (!_resolutionSuperView) {
_resolutionSuperView = [[UIView alloc]initWithFrame:CGRectMake(kUIScreenHeight-kUIFitSize(315), 0, kUIFitSize(315), kUIScreenWidth)];
_resolutionSuperView.hidden = YES;
_resolutionSuperView.backgroundColor = kUIColorFromRGBA(0x000000, 0.7);
NSArray * resolutionTitleArray = @[ @"流畅",@"高清"];
// 倍速父视图上边的Btn
for (NSInteger i = 0 ; i < resolutionTitleArray.count; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
btn.layer.borderColor = [UIColor clearColor].CGColor;
btn.layer.borderWidth = 1;
btn.layer.cornerRadius = kUIFitSize(5);
btn.layer.masksToBounds = YES;
btn.tag = 2000+i;
btn.frame = CGRectMake(kUIFitSize(96), kUIFitSize(118)+ kUIFitSize(35+25)*i, kUIFitSize(123), kUIFitSize(35));
btn.titleLabel.font = [UIFont systemFontOfSize:kUIFitSize(20)];
[btn setTitle:resolutionTitleArray[i] forState:UIControlStateNormal];
if ([resolutionTitleArray[i] isEqualToString:self.resolutionLandscapeBtn.titleLabel.text]) {//设置当前选中按钮
self.resolutionLandscapeCurrentBtn = btn;
btn.selected = YES;
btn.layer.borderColor = kUIColorFromRGB(0x0A93FF).CGColor;
[btn setTitleColor:kUIColorFromRGB(0x0A93FF) forState:UIControlStateNormal];
}
[self.resolutionSuperView addSubview:btn];
[btn addTarget:self
action:@selector(changeResolution:)
forControlEvents:UIControlEventTouchUpInside];
}
}
return _resolutionSuperView;
}
//点击倍速
- (void)changeRate:(UIButton *)sender
{
self.rateLanscapeCurrentBtn.layer.borderColor = [UIColor clearColor].CGColor;
[self.rateLanscapeCurrentBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
sender.layer.borderColor = kUIColorFromRGB(0x0A93FF).CGColor;
[sender setTitleColor:kUIColorFromRGB(0x0A93FF) forState:UIControlStateNormal];
self.rateLanscapeCurrentBtn = sender;
// 隐藏倍速列表父视图
self.rateSuperView.hidden = YES;
// topImageView上的按钮的文字
[self.rateLanscapeBtn setTitle:sender.titleLabel.text
forState:UIControlStateNormal];
// [self.controlView.landScapeControlView.rateBtn setTitle:sender.titleLabel.text forState:UIControlStateNormal];
NSInteger indexForRate = sender.tag - 3000;
switch (indexForRate) {
case 0:
self.playerManager.rate = 1.0;
break;
case 1:
self.playerManager.rate = 1.25;
break;
case 2:
self.playerManager.rate = 1.5;
break;
case 3:
self.playerManager.rate = 2.0;
break;
default:
break;
}
}
// 点击切换分辨率
- (void)changeResolution:(UIButton *)sender {
self.resolutionLandscapeCurrentBtn.layer.borderColor = [UIColor clearColor].CGColor;
[self.resolutionLandscapeCurrentBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
sender.layer.borderColor = kUIColorFromRGB(0x0A93FF).CGColor;
[sender setTitleColor:kUIColorFromRGB(0x0A93FF) forState:UIControlStateNormal];
self.resolutionLandscapeCurrentBtn = sender;
// 隐藏倍速列表父视图
self.resolutionSuperView.hidden = YES;
// topImageView上的按钮的文字
[self.resolutionLandscapeBtn setTitle:sender.titleLabel.text
forState:UIControlStateNormal];
NSTimeInterval currentTime = self.playerManager.currentTime;
if ([sender.currentTitle isEqualToString:@"流畅"]) {
// self.player.assetURL = [NSURL URLWithString:_currentModel.mp4_url];
}else{
// self.player.assetURL = [NSURL URLWithString:_currentModel.hd_mp4_url];
}
[self.playerManager seekToTime:currentTime completionHandler:^(BOOL finished) {
}];
}
#pragma mark 音频
#pragma mark - 用户设置关闭定时器
//开启倒计时
- (void)startResidualTimer {
WS(weakself)
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
self.setTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_setTimer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
dispatch_source_set_event_handler(_setTimer, ^{
if(weakself.timeout <= 0){ //倒计时结束,关闭
dispatch_source_cancel(weakself.setTimer);
dispatch_async(dispatch_get_main_queue(), ^{
//停止播放
[weakself.player.currentPlayerManager pause];
[weakself.startAudioBtn setImage:[UIImage imageNamed:@"ic_bf_yp"] forState:UIControlStateNormal];
weakself.isPlay = @"0";
dispatch_async(dispatch_get_main_queue(), ^(){
[weakself.daojishiBtn setTitle:@"" forState:UIControlStateNormal];
[weakself.daojishiBtn setImage:[UIImage imageNamed:@"ic_ds"] forState:UIControlStateNormal];
weakself.stopPlayout = NO;
});
});
}else{
dispatch_async(dispatch_get_main_queue(), ^(){
switch (weakself.isPlay.intValue) {
case 0:
{
}
break;
default:
{
weakself.timeout -- ;
[weakself.daojishiBtn setTitle:[weakself getMMSSFromSS:weakself.timeout] forState:UIControlStateNormal];
[weakself.daojishiBtn setImage:nil forState:UIControlStateNormal];
}
break;
}
});
}
});
dispatch_resume(_setTimer);
}
-(NSString *)getMMSSFromSS:(NSInteger )totalTime{
// NSInteger seconds = [totalTime integerValue];
//format of hour
// NSString *str_hour = [NSString stringWithFormat:@"%02ld",seconds/3600];
//format of minute
NSString *str_minute = [NSString stringWithFormat:@"%02ld",(totalTime%3600)/60];
//format of second
NSString *str_second = [NSString stringWithFormat:@"%02ld",totalTime%60];
//format of time
// NSString *format_time = [NSString stringWithFormat:@"%@:%@:%@",str_hour,str_minute,str_second];
NSString *format_time = [NSString stringWithFormat:@"%@:%@",str_minute,str_second];
return format_time;
}
#pragma mark 音频视图 V416之前有 现在被删掉了
#pragma mark 章节父视图
- (UIView *)courseSuperView
{
if (!_courseSuperView) {
self.courseSuperView = [[UIView alloc]initWithFrame:CGRectMake(kUIScreenHeight-kUIFitSize(381), 0, kUIFitSize(381), kUIScreenWidth)];
_courseSuperView.hidden = YES;
_courseSuperView.backgroundColor = [UIColor blackColor];
}
return _courseSuperView;
}
- (NSMutableArray *)allListAry
{
if (!_allListAry) {
self.allListAry = [NSMutableArray array];
}
return _allListAry;
}
#pragma mark 模型转字典
-(NSMutableDictionary *)onereturnToDictionaryWithModel:(LMSNewLectureModel *)model
{
NSMutableDictionary *userDic = [NSMutableDictionary dictionary];
unsigned int count = 0;
objc_property_t *properties = class_copyPropertyList([LMSNewLectureModel class], &count);
for (int i = 0; i < count; i++) {
const char *name = property_getName(properties[i]);
NSString *propertyName = [NSString stringWithUTF8String:name];
id propertyValue = [model valueForKey:propertyName];
if (propertyValue) {
[userDic setObject:propertyValue forKey:propertyName];
}
}
free(properties);
return userDic;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//点击的view的类名
NSLog(@"%@", NSStringFromClass([touch.view class]));
// UITableViewCellContentView就是点击了tableViewCell,则不截获点击事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]){
return NO;
}
return YES;
}
- (void)acqucireRecordServiceProgress:(NSInteger)progress curpage:(NSInteger)last_learn
{
NSDictionary *para = @{@"learn_id":self.currentLearnModel.lecture_id,
@"progress":@(progress),
@"last_learn":@(last_learn)
};
[[LMSNewAPIClient apiManager] putRequestAPI:[NSString stringWithFormat:@"client/plan/learn/progress/%@",self.detailModel.relation_id] parameters:para success:^(NSURLSessionDataTask *dataTask, id JSON) {
} failure:^(NSURLSessionDataTask *dataTask, NSError *error) {
}];
}
- (void)acqutireTimeRecordLast_learn:(NSInteger)last_learn
{
NSDictionary *para = @{@"learn_id":self.currentLearnModel.lecture_id,
@"last_learn":@(last_learn)
};
[[LMSNewAPIClient apiManager] putRequestAPI:[NSString stringWithFormat:@"client/plan/learn/%@",self.detailModel.relation_id] parameters:para success:^(NSURLSessionDataTask *dataTask, id JSON) {
} failure:^(NSURLSessionDataTask *dataTask, NSError *error) {
}];
}
#pragma mark 监管app前台还是后台
- (void)applicationEnterBackground
{
[self pauseTimer];
}
- (void)applicationBecomeActive
{
[self beginTimer];
}
#pragma mark 仅仅是网络请求更新数据
- (void)acquireReloadNetWorking
{
WS(weakself)
NSDictionary *parameters = @{@"token":kUserToken
};
//todo @"client/plan/course/21676"
[[LMSNewAPIClient apiManager] getRequestAPI:[NSString stringWithFormat:@"%@%@",self.urlStr,self.relationID] parameters:parameters success:^(NSURLSessionDataTask *dataTask, id JSON) {
MyLog(@"%@", JSON);
weakself.detailModel = [LMSNewLearnDetailModel mj_objectWithKeyValues:JSON[@"data"]];
[weakself showEvaluateAction];
if([weakself.detailModel.chapterMArr.firstObject isNotNullOrEmpty] == NO) {
// return;
}
[[NSNotificationCenter defaultCenter] postNotificationName:KLearnBaseReloadNetWorking object:JSON[@"data"]];
//这个时候该给另外两个控制器更新数据源
} failure:^(NSURLSessionDataTask *dataTask, NSError *error) {
}];
}
#pragma mark 弹出是否点击去评价的弹框
- (void) showEvaluateAction
{
WS(weakself)
// NSString *isfirst = [[NSUserDefaults standardUserDefaults] objectForKey:KFirstEvaluate];
NSData *data = [[NSUserDefaults standardUserDefaults]objectForKey:KCourseEvaluateIDKeys];
NSString *isfirst = nil;
NSTimeInterval interval = 0;
if (data) {
NSDictionary *jsonDict = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:data];
// NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
if ([[jsonDict allKeys]containsObject:self.detailModel.course_id]) {
isfirst = jsonDict[self.detailModel.course_id];
}
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *createdAtDate = [fmt dateFromString:isfirst];
// 手机当前时间
// NSDate *nowDate = [NSDate date];
// 获得createdAtDate和nowDate的时间间隔(间隔多少秒)
// NSTimeInterval interval = [nowDate timeIntervalSinceDate:createdAtDate];
interval = [createdAtDate timeIntervalSinceNow];
NSLog(@"%f", interval);
}
// if ([self.urlStr isEqualToString:@"client/plan/course/"]&&self.detailModel.progress.intValue>=60 && self.detailModel.study_configModel.re_test_num.intValue>=1&&( isfirst.length == 0||fabsf(interval)>=60*60*24*5) && self.detailModel.feedbackModel.feedback_id.intValue == 0) {//线上环境
if ([self.urlStr isEqualToString:@"client/plan/course/"]&&self.detailModel.progress.intValue>=60 && self.detailModel.study_configModel.re_test_num.intValue>=1&&( isfirst.length == 0||fabs(interval)>=60*60*24*5) && self.detailModel.feedbackModel.feedback_id.intValue == 0) {
weakself.lCerBuySucceedView = [[LCerBuySucceedView alloc]initWithFrame:CGRectMake(0, 0, kUIScreenWidth, kUIScreenHeight)];
weakself.lCerBuySucceedView.delegate = weakself;
weakself.lCerBuySucceedView.detailModel = weakself.detailModel;
[[[UIApplication sharedApplication].delegate window] addSubview:weakself.lCerBuySucceedView];
}
}
#pragma mark //音频处理
#pragma marl ######################################################音频这里挑出来
#pragma mark - 用户设置关闭定时器
#pragma mark - 返回按钮点击
-(void)backBtnClick{
[[NSNotificationCenter defaultCenter] postNotificationName:@"learnbackAction" object:nil];
}
//视频讲义按钮点击
- (void)tipsBtnClick:(UIButton *)sender
{
switch (sender.tag-233) {
case 0:{
[self setTimeAction];
}
break;
case 1:{
// [MBProgressHUD showText:@"下载"];
WS(weakSelf)
weakSelf.isPresent = @"1";
[MobClick event:@"v4_ios_learn_download"];
#pragma mark----下载音频跳转
if([[NSUserDefaults standardUserDefaults] boolForKey:kSettingIsUseDataWatchCourse] == NO && [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN) {//蜂窝网络且不允许流量下载
[weakSelf WWANNetworkingDownloadAler];
} else {
LMSNDownloadMenuViewContorller *vc = [[LMSNDownloadMenuViewContorller alloc] initWithModel:weakSelf.detailModel courType:weakSelf.urlStr];
vc.catcheManageClouse = ^{
LMSNMyDownloadVC *vc = [LMSNMyDownloadVC new];
[weakSelf.navigationController pushViewController:vc animated:false];
};
LNavigationViewController *nav = [[LNavigationViewController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[weakSelf presentViewController:nav animated:false completion:nil];
}
}
break;
case 2:{
if (self.currentLearnModel.mp4_url.length) {
[self videoBtnClick];
}
else
{
[MBProgressHUD showText:@"当前课程没有视频哦"];
}
}
break;
default:
break;
}
}
- (void)videoBtnClick
{
self.player.assetURL = [NSURL URLWithString:self.currentLearnModel.mp4_url];
self.audioTitleLabel.text = self.currentLearnModel.lecture_title;
self.listeningV416View.hidden = YES;
[self.controlView.portraitControlView.slider removeFromSuperview];
[self.controlView.portraitControlView.currentTimeLabel removeFromSuperview];
[self.controlView.portraitControlView.totalTimeLabel removeFromSuperview];
self.controlView.portraitControlView.slider.frame = CGRectMake(90, 10, kUIScreenWidth-180, 24);
self.controlView.portraitControlView.currentTimeLabel.frame = CGRectMake(0, 10, 100, 24);
self.controlView.portraitControlView.totalTimeLabel.frame = CGRectMake(kUIScreenWidth-100, 10, 70, 24);
[self.controlView.portraitControlView.bottomToolView addSubview:self.controlView.portraitControlView.slider];
[self.controlView.portraitControlView.bottomToolView addSubview:self.controlView.portraitControlView.currentTimeLabel];
[self.controlView.portraitControlView.bottomToolView addSubview:self.controlView.portraitControlView.totalTimeLabel];
self.player.pauseWhenAppResignActive = YES;
if ([self.urlStr containsString:@"company-course"]) {//自制课程
if (self.currentLearnModel.progress.intValue>95) {
}
else
{
NSInteger lastSexond = [self.currentLearnModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
} else {//先之课程
if ((self.currentLearnModel.lecture_length.intValue - self.currentLearnModel.last_learn.intValue)>10) {
NSInteger lastSexond = [self.currentLearnModel.last_learn integerValue];
[self.playerManager seekToTime:lastSexond completionHandler:nil];
}
}
}
#pragma mark - 控制按钮点击
//快退
-(void)retreatBtnClick{
NSInteger time = (self.player.currentTime - 15) >= 0 ? (self.player.currentTime - 15) : 0;
[self.playerManager seekToTime:time completionHandler:nil];
WS(weakself)
if (self.stopPlayout) {
NSTimeInterval currentTimeSec = weakself.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = weakself.player.totalTime;
weakself.timeout =floor(totalTimeSec - currentTimeSec+0.5)+1;
[weakself startResidualTimer];
}
}
//开始、暂停
-(void)startBtnClick:(UIButton *)sender{
if ([self.isPlay isEqualToString:@"1"]) {
[self.startAudioBtn setImage:[UIImage imageNamed:@"ic_bf_yp"] forState:UIControlStateNormal];
self.isPlay = @"0";
[self pauseTimer];
[self.player.currentPlayerManager pause];
}else{
[self.startAudioBtn setImage:[UIImage imageNamed:@"ic_yp_bf"] forState:UIControlStateNormal];
self.isPlay = @"1";
[self beginTimer];
[self.player.currentPlayerManager play];
}
//
}
//快进
-(void)forwardBtnClick{
NSInteger time = (self.player.currentTime + 15) <= self.player.totalTime ? (self.player.currentTime + 15) : self.player.totalTime;
[self.playerManager seekToTime:time completionHandler:nil];
WS(weakself)
if (self.stopPlayout) {
NSTimeInterval currentTimeSec = weakself.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = weakself.player.totalTime;
weakself.timeout =( floor(totalTimeSec - currentTimeSec +0.5)-13);
[weakself startResidualTimer];
}
}
#pragma mark 定时
- (void)setTimeAction
{
PlayerTimingView *timingView = [[PlayerTimingView alloc] initWithFrame:[UIApplication sharedApplication].keyWindow.bounds];
WS(weakself)
timingView.selectedBlock = ^(NSInteger index) {
switch (index) {
case 0:{
weakself.stopPlayout = NO;
if (weakself.setTimer) {
dispatch_source_cancel(weakself.setTimer);
}
[weakself.daojishiBtn setTitle:@"" forState:UIControlStateNormal];
[weakself.daojishiBtn setImage:[UIImage imageNamed:@"ic_ds"] forState:UIControlStateNormal];
}
break;
case 1:{ //15分钟
weakself.stopPlayout = NO;
weakself.timeout = 15 * 60;
[weakself startResidualTimer];
}
break;
case 2:{ //30分钟
weakself.stopPlayout = NO;
weakself.timeout = 30 * 60;
[weakself startResidualTimer];
}
break;
case 3:{ //45分钟
weakself.stopPlayout = NO;
weakself.timeout = 45 * 60;
[weakself startResidualTimer];
}
break;
case 4:{ //60分钟
weakself.stopPlayout = NO;
weakself.timeout = 60 * 60;
[weakself startResidualTimer];
}
break;
case 5:{ //播放完当前音频
weakself.stopPlayout = YES;
if (weakself.setTimer) {
dispatch_source_cancel(weakself.setTimer);
}
NSTimeInterval currentTimeSec = weakself.player.currentTime;
//获取已经播放的时间
NSTimeInterval totalTimeSec = weakself.player.totalTime;
weakself.timeout = floor(totalTimeSec - currentTimeSec+0.5);
[weakself startResidualTimer];
}
break;
}
};
[timingView show];
}
控制器没有离开页面,问题解决了原因没找到