下载视频文件

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;

results matching ""

    No results matching ""