下载视频文件
1、在 Delegate 中导入头文件 #import"TYDownloadSessionManager.h"
2、在didFinishLaunchingWithOptions 中完成配置
#import "RainbowProgress.h"
#import "Masonry.h"
#import "Reachability.h"
#import "DisconnectedViewController.h"
#import "TYDownLoadDataManager.h"
#import "TYDownLoadUtility.h"
#import "MBProgressHUD.h"
#import "ProgressSlider.h"
#import "AVPlayerView.h"
#define PLAYVIEW_WIDTH [UIScreen mainScreen].bounds.size.width
#define PLAYVIEW_HEIGHT [UIScreen mainScreen].bounds.size.height-120
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define defaultes [NSUserDefaults standardUserDefaults]
@interface SlideViewController ()<SDCycleScrollViewDelegate,TYDownloadDelegate>
{
UIActivityIndicatorView *_actIndicator;
MPMoviePlayerController *_mpC;
UIView *videoView;
UIScrollView *cycleView;
UIImageView *defaultView;
MBProgressHUD *HUD;
}
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UILabel *statuesLabel;
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) NSTimer *AdvertTimer;
@property (nonatomic,strong) RainbowProgress *progress;
// 下载文件
@property (nonatomic, strong) NSMutableArray *downloadedArray;
@property (nonatomic,strong) TYDownloadModel *downloadModel;
@property (nonatomic, copy) NSString *downloadUrl;
@property (nonatomic, strong) UILabel *progressLabel;
//底部BottmView
@property (nonatomic,strong) UIView *bottomView;
@property (nonatomic,strong) UIProgressView *progressView;
//自动消失定时器
@property (nonatomic,strong) NSTimer *autoDismissTimer;
@property (nonatomic,assign) BOOL isDragSlider;
@property (strong, nonatomic) Reachability *reach;
@property (strong, nonatomic) Reachability *currentreach;
@property (strong, nonatomic) AVPlayer *avPlayer;
@property (strong, nonatomic) AVPlayerItem *avPlayerItem;
@property (strong, nonatomic) AVPlayerLayer *avPlayerLayer;
@property (strong, nonatomic) UIView *playBottomView;
@property (strong, nonatomic) UILabel *PlayTimeLabel;
@property (strong, nonatomic) ProgressSlider *slider;
@property (nonatomic, strong) UIActivityIndicatorView *activity;
@property (nonatomic, strong) CADisplayLink *link;
@property (nonatomic, assign) NSTimeInterval lastTime;
@property (assign, nonatomic) BOOL isHidenTabView;
@property (assign, nonatomic) BOOL isHidenListView;
@property (copy, nonatomic) NSURL *playVideoUrl;
@property (nonatomic, strong) SDCycleScrollView *cycleScrollView;
@property (nonatomic, strong) NSMutableArray *imagesArray;
@end
@implementation SlideViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:YES];
[self setRoomStatues];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.downloadedArray = [NSMutableArray array];
self.imagesArray = [NSMutableArray array];
[self createBgViews];
[self requestForResourcesFile];
[TYDownLoadDataManager manager].delegate = self;
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
[[NSRunLoop currentRunLoop] addTimer:self.AdvertTimer forMode:NSRunLoopCommonModes];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground)name:UIApplicationWillEnterForegroundNotification object:nil];
}
- (void)requestForResourcesFile {
NSString *roomID= [defaultes objectForKey:@"RoomID"];
NSString *domainString = [[NSBundle mainBundle].infoDictionary objectForKey:@"InternalHost"];
NSString *roomId = [[NSUserDefaults standardUserDefaults] objectForKey:@"RoomID"];
if ([[roomId uppercaseString] isEqualToString:@"BJNU0001"]) {
domainString = @"https://smartofficetest.pwchk.com/MBooking";
}
NSString *urlString = [NSString stringWithFormat:@"%@/api/Mobile/GetAdvertByResourceId",domainString];
WCFJSONRequest *request = [[WCFJSONRequest alloc] initWithMethod:HttpMethodPOST];
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:roomID ,@"ResourceId", nil];
request.serviceUrl = urlString;
request.bodyObject= dict;
[request addValue:DEVICEID forHTTPHeaderField:@"DEVICEID"];
[request addValue:DEVICENAME forHTTPHeaderField:@"DEVICENAME"];
[request addValue:DEVICEMODEL forHTTPHeaderField:@"DEVICEMODEL"];
WebAccessResult result = [request start];
@try {
if (result == WebAccessResultDone)
{
ServiceWrapper *wrapper = [[ServiceWrapper alloc] initWithDictionary:request.resultObject];
if (wrapper.returnCode == 0)
{
NSString *adverType = [wrapper.data objectForKey:@"AdvertType"];
if ([adverType isEqualToString:@"PIC"]) {
// 显示轮播图
[self.avPlayer pause];
[cycleView setHidden:NO];
[videoView setHidden:YES];
self.progress.hidden = YES;
self.progressLabel.hidden=YES;
self.bottomView.hidden = YES;
self.playBottomView.hidden = YES;
[self.imagesArray removeAllObjects];
for (NSString *url in [wrapper.data objectForKey:@"AdvertName"]) {
NSString *imagesUrl = [NSString stringWithFormat:@"%@%@", domainString, url];
[self.imagesArray addObject:imagesUrl];
}
[self displayImagesViewWithImagesArray:self.imagesArray];
}else if ([adverType isEqualToString:@"VIDEO"]) {
[cycleView setHidden:YES];
NSString *url = [wrapper.data objectForKey:@"AdvertName"][0];
NSString *videoUrl = [NSString stringWithFormat:@"%@%@",domainString, url];
// 判断视频是否已经存在
NSString *videoName = [[videoUrl componentsSeparatedByString:@"/"] lastObject];
NSMutableArray *videoNameArray = [defaultes objectForKey:@"VideoName"];
NSURL *playUrl = [self urlOfCurrentlyPlayingInPlayer:self.avPlayer];
NSString *strName = [[playUrl.absoluteString componentsSeparatedByString:@"/"] lastObject];
if ([videoName isEqualToString:strName]) {
self.playBottomView.hidden = NO;
videoView.hidden = NO;
[self.avPlayer play];
self.slider.enabled=YES;
[self showOrHideBar];
return;
}
if (videoNameArray.count >= 1) {
if ([videoNameArray containsObject:videoName]) {
NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:videoName];
videoView.hidden = NO;
self.bottomView.hidden = NO;
self.progress.hidden = YES;
self.progressLabel.hidden = YES;
self.playBottomView.hidden = NO;
[self changeCurrentplayerItemWithVideoUrl:[NSURL fileURLWithPath:fullPath]];
self.playVideoUrl = [NSURL fileURLWithPath:fullPath];
[self.avPlayer play];
self.slider.enabled = YES;
}else {
[self loadVideoWithVideoPath:videoUrl andVideoName:videoName];
}
}else {
[self loadVideoWithVideoPath:videoUrl andVideoName:videoName];
}
}else {
[cycleView setHidden:YES];
[videoView setHidden:YES];
self.progress.hidden = YES;
self.progressLabel.hidden = YES;
self.bottomView.hidden = YES;
self.playBottomView.hidden = YES;
[self.avPlayer pause];
}
}else {
if (HUD) {
[HUD removeFromSuperview];
}
HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.mode = MBProgressHUDModeCustomView;
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error.png"]];
HUD.labelText = @"Error";
HUD.detailsLabelFont=[UIFont fontWithName:@"verdana" size:12.0];
HUD.detailsLabelText = wrapper.message;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD removeFromSuperview];
});
}
}else {
if (HUD) {
[HUD removeFromSuperview];
}
HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.mode = MBProgressHUDModeCustomView;
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error.png"]];
HUD.labelText = @"Error";
HUD.detailsLabelFont=[UIFont fontWithName:@"verdana" size:12.0];
HUD.detailsLabelText = @"Get advert failed,an error occured while processing the request.";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[HUD removeFromSuperview];
});
}
}@catch (NSException *exception)
{
}
}
// 下载视频
- (void)loadVideoWithVideoPath:(NSString *)url andVideoName:(NSString *)videoName{
// 判断是否需要重新下载
[self refreshDowloadInfoWithVideoPath:url andVideoName:videoName];
}
- (void)refreshDowloadInfoWithVideoPath:(NSString *)url andVideoName:(NSString *)videoName
{
// manager里面是否有这个model是正在下载
_downloadModel = [[TYDownLoadDataManager manager] downLoadingModelForURLString:url];
if (_downloadModel) {
[self startDownlaod:videoName];
return;
}
// 没有正在下载的model 重新创建
TYDownloadModel *model = [[TYDownloadModel alloc]initWithURLString:url];
TYDownloadProgress *progress = [[TYDownLoadDataManager manager]progessWithDownloadModel:model];
self.progressView.progress = progress.progress;
_downloadModel = model;
[self startDownlaod:videoName];
}
- (void)startDownlaod:(NSString *)videoName
{
TYDownLoadDataManager *manager = [TYDownLoadDataManager manager];
__weak typeof(self) weakSelf = self;
[manager startWithDownloadModel:_downloadModel progress:^(TYDownloadProgress *progress) {
weakSelf.progress.hidden = NO;
weakSelf.progressLabel.hidden = NO;
weakSelf.bottomView.hidden = NO;
weakSelf.playBottomView.hidden = YES;
cycleView.hidden = YES;
videoView.hidden = YES;
weakSelf.progress.progressValue = progress.progress;
weakSelf.progressLabel.text = [NSString stringWithFormat:@"%.2f%%",weakSelf.progress.progressValue *100];
} state:^(TYDownloadState state, NSString *filePath, NSError *error) {
if (state == TYDownloadStateCompleted) {
weakSelf.progress.progressValue = 1.0;
weakSelf.progressLabel.text = [NSString stringWithFormat:@"progress %.2f",weakSelf.progressView.progress];
weakSelf.progress.hidden = YES;
weakSelf.progressLabel.hidden = YES;
weakSelf.bottomView.hidden = YES;
weakSelf.playBottomView.hidden = NO;
videoView.hidden = NO;
NSMutableArray *videoNameArray = [NSMutableArray array];
NSArray *tmpArr = [defaultes objectForKey:@"VideoName"];
[videoNameArray addObjectsFromArray:tmpArr];
if (videoNameArray.count >= 10) {
NSFileManager *manager = [NSFileManager defaultManager];
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSString *deleteFilePath = [cachesPath stringByAppendingPathComponent:videoNameArray[videoNameArray.count-1]];
[manager removeItemAtPath:deleteFilePath error:nil];
[videoNameArray removeObjectAtIndex:videoNameArray.count-1];
}
[videoNameArray insertObject:videoName atIndex:0];
[defaultes setObject:videoNameArray forKey:@"VideoName"];
[defaultes synchronize];
[self changeCurrentplayerItemWithVideoUrl:[NSURL fileURLWithPath:filePath]];
self.playVideoUrl = [NSURL fileURLWithPath:filePath];
if ([[self getCurrentVC] isKindOfClass: [SlideViewController class]]) {
[self.avPlayer play];
self.slider.enabled = YES;
}else
{
// [self.avPlayer pause];
//self.slider.enabled = YES;
}
}
}];
}
- (void)downloadModel:(TYDownloadModel *)downloadModel didUpdateProgress:(TYDownloadProgress *)progress
{
NSLog(@"delegate progress %.3f",progress.progress);
}
- (void)downloadModel:(TYDownloadModel *)downloadModel didChangeState:(TYDownloadState)state filePath:(NSString *)filePath error:(NSError *)error
{
NSLog(@"delegate state %ld error%@ filePath%@",(unsigned long)state,error,filePath);
}
- (void)displayImagesViewWithImagesArray:(NSMutableArray *)imagesArray {
if (self.cycleScrollView) {
[self.cycleScrollView removeFromSuperview];
}
self.cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 0, PLAYVIEW_WIDTH, PLAYVIEW_HEIGHT) imageURLStringsGroup:imagesArray];
self.cycleScrollView.delegate = self;
self.cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleAnimated;
[cycleView addSubview:self.cycleScrollView];
}
#pragma mark - slider的更改
- (void)createBgViews {
videoView = [[UIView alloc] initWithFrame:CGRectMake(0, 120, PLAYVIEW_WIDTH, PLAYVIEW_HEIGHT)];
[videoView setHidden:YES];
[self.view addSubview:videoView];
cycleView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 120, PLAYVIEW_WIDTH, PLAYVIEW_HEIGHT)];
cycleView.contentSize = CGSizeMake(PLAYVIEW_WIDTH, PLAYVIEW_HEIGHT);
[cycleView setHidden:YES];
[self.view addSubview:cycleView];
self.progress = [[RainbowProgress alloc] init];
[self.progress startAnimating];
self.progress.hidden = YES;
[self.view addSubview:self.progress];
self.progress.backgroundColor = [UIColor lightGrayColor];
self.progress.progressHeigh = [UIScreen mainScreen].bounds.size.height - 20;
self.progress = self.progress;
_progressLabel = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width - 60, [UIScreen mainScreen].bounds.size.height - 60, 56, 56)];
_progressLabel.hidden = YES;
_progressLabel.textColor = [UIColor colorWithRed:62.0/255 green:31.0/255 blue:127.0/255 alpha:1];
_progressLabel.font = [UIFont fontWithName:@"verdana" size:12.0];
_progressLabel.textAlignment = NSTextAlignmentCenter;
_progressLabel.layer.cornerRadius = 28;
_progressLabel.layer.masksToBounds = YES;
_progressLabel.backgroundColor = [UIColor colorWithRed:229.0/255 green:33.0/255 blue:131.0/255 alpha:1];
[self.view addSubview:_progressLabel];
[self setUpBottomView];
[self setUpPlayView];
}
- (void)setUpBottomView {
// 布局底部功能栏
self.bottomView = [[UIView alloc] init];
self.bottomView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.01];
[videoView addSubview:self.bottomView];
self.bottomView.hidden = YES;
[self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(videoView).with.offset(0);
make.right.equalTo(videoView).with.offset(0);
make.bottom.equalTo(videoView).with.offset(0);
make.height.mas_equalTo(30);
}];
}
- (void)setUpPlayView {
[self initPlayer];
[self initPlayerSubViews];
//播放完成通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playbackFinished:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
}
- (void)initPlayer
{
self.avPlayerItem = [AVPlayerItem playerItemWithURL:self.playVideoUrl];
[self addObserveWithPlayerItem:self.avPlayerItem];
self.avPlayer = [AVPlayer playerWithPlayerItem:self.avPlayerItem];
self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
AVPlayerView *avPlayerView = [[AVPlayerView alloc] initWithMoviePlayerLayer:self.avPlayerLayer frame:videoView.bounds];
[videoView addSubview:avPlayerView];
self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(upadte)];
[self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)initPlayerSubViews
{
//bottonBar
self.playBottomView = [[UIView alloc] initWithFrame:CGRectZero];
self.playBottomView.backgroundColor = [UIColor blackColor];
self.playBottomView.alpha = .5;
self.playBottomView.hidden = YES;
[self.view addSubview:self.playBottomView];
[self.playBottomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view);
make.left.equalTo(self.view);
make.right.equalTo(self.view);
make.height.mas_equalTo(60);
}];
//时间
self.PlayTimeLabel = [[UILabel alloc] initWithFrame:CGRectZero];
self.PlayTimeLabel.text = @"00:00:00/00:00:00";
self.PlayTimeLabel.textColor = [UIColor whiteColor];
self.PlayTimeLabel.textAlignment = NSTextAlignmentRight;
[self.playBottomView addSubview:self.PlayTimeLabel];
CGSize size = CGSizeMake(1000,10000);
//计算实际frame大小,并将label的frame变成实际大小
NSDictionary *attribute = @{NSFontAttributeName:self.PlayTimeLabel.font};
CGSize labelsize = [self.PlayTimeLabel.text boundingRectWithSize:size options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
[self.PlayTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.playBottomView).offset(-10);
make.top.equalTo(self.playBottomView).offset(10);
make.bottom.equalTo(self.playBottomView).offset(-10);
make.width.mas_equalTo(labelsize.width + 5);
}];
//滑块
self.slider = [[ProgressSlider alloc] initWithFrame:CGRectZero direction:SliderDirectionHorizonal];
[self.playBottomView addSubview:self.slider];
self.slider.enabled = NO;
[self.slider mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.bottomView.mas_left).offset(20);
make.right.equalTo(self.PlayTimeLabel.mas_left).offset(-10);
make.height.mas_equalTo(40);
make.centerY.equalTo(self.playBottomView);
}];
[self.slider addTarget:self action:@selector(progressValueChange:) forControlEvents:UIControlEventValueChanged];
}
//视频播放完成
-(void)playbackFinished:(NSNotification *)notification{
AVPlayerItem * p = [notification object];
[p seekToTime:kCMTimeZero];
[self.avPlayer play];
}
//切换当前播放的内容
- (void)changeCurrentplayerItemWithVideoUrl:(NSURL *)videoUrl
{
// [self.avPlayer pause];
if (self.avPlayer) {
self.link.paused = NO;
//移除当前AVPlayerItem对"loadedTimeRanges"和"status"的监听
[self removeObserveWithPlayerItem:self.avPlayer.currentItem];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:videoUrl];
[self addObserveWithPlayerItem:playerItem];
self.avPlayerItem = playerItem;
//更换播放的AVPlayerItem
[self.avPlayer replaceCurrentItemWithPlayerItem:self.avPlayerItem];
self.slider.enabled = NO;
}
[self showOrHideBar];
}
- (void)upadte
{
NSTimeInterval current = CMTimeGetSeconds(self.avPlayer.currentTime);
NSTimeInterval total = CMTimeGetSeconds(self.avPlayer.currentItem.duration);
//如果用户在手动滑动滑块,则不对滑块的进度进行设置重绘
if (!self.slider.isSliding) {
self.slider.sliderPercent = current/total;
}
if (current!=self.lastTime) {
[self.activity stopAnimating];
self.PlayTimeLabel.text = [NSString stringWithFormat:@"%@/%@", [self formatPlayTime:current], isnan(total)?@"00:00:00":[self formatPlayTime:total]];
}else{
[self.activity startAnimating];
}
self.lastTime = current;
}
//处理滑块
- (void)progressValueChange:(ProgressSlider *)slider
{
if (self.avPlayer.status == AVPlayerStatusReadyToPlay) {
NSTimeInterval duration = self.slider.sliderPercent* CMTimeGetSeconds(self.avPlayer.currentItem.duration);
CMTime seekTime = CMTimeMake(duration, 1);
[self.avPlayer seekToTime:seekTime completionHandler:^(BOOL finished) {
}];
}
}
#pragma mark 监听视频缓冲和加载状态
//注册观察者监听状态和缓冲
- (void)addObserveWithPlayerItem:(AVPlayerItem *)playerItem
{
[playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
}
//移除处观察者
- (void)removeObserveWithPlayerItem:(AVPlayerItem *)playerItem
{
[playerItem removeObserver:self forKeyPath:@"loadedTimeRanges"];
[playerItem removeObserver:self forKeyPath:@"status"];
}
- (NSString *)formatPlayTime:(NSTimeInterval)duration
{
int minute = 0, hour = 0, secend = duration;
minute = (secend % 3600)/60;
hour = secend / 3600;
secend = secend % 60;
return [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, secend];
}
#pragma 手势
- (void)showOrHideBar
{
[UIView animateWithDuration:.3 animations:^{
[self.playBottomView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view).offset(0);
}];
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.playBottomView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view).offset(60);
}];
});
}];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
AVPlayerItem *playerItem = (AVPlayerItem *)object;
if ([keyPath isEqualToString:@"status"]){
if (playerItem.status == AVPlayerItemStatusReadyToPlay){
if ([[self getCurrentVC] isKindOfClass: [SlideViewController class]]) {
[self.avPlayer play];
self.slider.enabled = YES;
}else
{
// [self.avPlayer pause];
//self.slider.enabled = YES;
}
} else{
}
}
}
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
//app默认windowLevel是UIWindowLevelNormal,如果不是,找到它
if (window.windowLevel != UIWindowLevelNormal) {
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows) {
if (tmpWin.windowLevel == UIWindowLevelNormal) {
window = tmpWin;
break;
}
}
}
id nextResponder = nil;
UIViewController *appRootVC = window.rootViewController;
//1、通过present弹出VC,appRootVC.presentedViewController不为nil
if (appRootVC.presentedViewController) {
nextResponder = appRootVC.presentedViewController;
}else{
//2、通过navigationcontroller弹出VC
NSLog(@"subviews == %@",[window subviews]);
UIView *frontView = [[window subviews] objectAtIndex:0];
nextResponder = [frontView nextResponder];
}
//1、tabBarController
if ([nextResponder isKindOfClass:[UITabBarController class]]){
UITabBarController * tabbar = (UITabBarController *)nextResponder;
UINavigationController * nav = (UINavigationController *)tabbar.viewControllers[tabbar.selectedIndex];
//或者 UINavigationController * nav = tabbar.selectedViewController;
result = nav.childViewControllers.lastObject;
}else if ([nextResponder isKindOfClass:[UINavigationController class]]){
//2、navigationController
UIViewController * nav = (UIViewController *)nextResponder;
result = nav.childViewControllers.lastObject;
}else{//3、viewControler
result = nextResponder;
}
return result;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self showOrHideBar];
}
- (void)setRoomStatues {
self.titleLabel.text=[WebRequestHelper getMeetingStatus];
NSString *roomStatus = [defaultes objectForKey:@"roomStatus"];
if ([roomStatus isEqualToString:@"0"]) {
self.timeLabel.text = @"";
self.statuesLabel.backgroundColor = [UIColor hexStringToColor:@"#a5cd50"];
self.statuesLabel.text = @"Available";
}else {
NSString *timeStr;
NSRange range = [self.titleLabel.text rangeOfString:@" "];
if (range.location != NSNotFound) {
timeStr = [self.titleLabel.text substringToIndex:range.location];
}
self.timeLabel.text = timeStr;
self.titleLabel.text = [self.titleLabel.text substringFromIndex:(range.location+1)];
self.statuesLabel.backgroundColor = [UIColor hexStringToColor:@"#503291"];
self.statuesLabel.text = @"UnAvailable";
}
}
-(NSURL *)urlOfCurrentlyPlayingInPlayer:(AVPlayer *)player{
AVAsset *currentPlayerAsset = player.currentItem.asset;
if (![currentPlayerAsset isKindOfClass:AVURLAsset.class]) return nil;
return [(AVURLAsset *)currentPlayerAsset URL];
}
- (IBAction)goBackBtnClick:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index
{
return;
}
- (NSTimer*)timer
{
if (!_timer) {
NSTimer* timer = [NSTimer timerWithTimeInterval:2 * 60 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
_timer = timer;
}
return _timer;
}
- (void)updateTimer
{
[self setRoomStatues];
}
- (NSTimer*)AdvertTimer
{
if (!_AdvertTimer) {
NSTimer *timer = [NSTimer timerWithTimeInterval:5*60 target:self selector:@selector(updateAdvertTimer) userInfo:nil repeats:YES];
_AdvertTimer = timer;
}
return _AdvertTimer;
}
- (void)updateAdvertTimer
{
[self requestForResourcesFile];
}
- (void)applicationWillEnterForeground {
//[self.avPlayer plplayay];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:YES];
[self.timer invalidate];
[self.AdvertTimer invalidate];
[self.avPlayer pause];
[self removeObserveWithPlayerItem:self.avPlayer.currentItem];
//[[NSNotificationCenter defaultCenter] removeObserver:self];
if (HUD) {
[HUD removeFromSuperview];
}
}
3、 在使用的页面遵守协议 <TYDownloadDelegate>, 设置代理 [TYDownLoadDataManager manager].delegate = self;