美文网首页iOS菜鸟联盟iOS点点滴滴
iOS 视频播放全屏解决方案HFVideoPlayer(解决状态

iOS 视频播放全屏解决方案HFVideoPlayer(解决状态

作者: 走向菜鸟的菜鸟 | 来源:发表于2018-01-24 17:25 被阅读15次

    本人水平较低,还需进行优化,有不足的地方还请评论指出,多多指教,谢谢。

    这里是demo地址

    最初使用的是36 氪开源项目KRVideoPlayer完成视频播放功能,但是无奈全屏的时候状态栏还是竖屏,最初为了开发进度就横屏隐藏状态栏了,但是感觉后期还需要完善,so,根据KRVideoPlayer的逻辑自己进行了一个简单的优化封装(部分代码仿照KRVideoPlayer)。

    将播放的视图aView添加到HFVideoPlayerControlView上即可,用法如下:

        HFVideoPlayerControlView *videoPlay = [[HFVideoPlayerControlView alloc] initWithFrame:CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.width*9/16)];
        videoPlay.delegate = self;
        videoPlay.currentTimeLabel.text = @"12:59:59";
        videoPlay.totalTimeLabel.text = @"12:59:59";
        [self.view addSubview:videoPlay];
        
        UIImageView *aView = [[UIImageView alloc] init];
        aView.image = [UIImage imageNamed:@"16091G34I9-6.jpg"];
        aView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
        aView.frame = CGRectMake(CGRectGetMinX(videoPlay.bounds), CGRectGetMinY(videoPlay.bounds), CGRectGetWidth(videoPlay.bounds), CGRectGetHeight(videoPlay.bounds));
        [videoPlay addSubview:aView];
        // 这两行代码使为了让aView随着videoPlay的变化而变化
        aView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        aView.contentMode = UIViewContentModeScaleAspectFit;
        // 让播放视频视图处于控制视图下方
        [videoPlay sendSubviewToBack:aView];
    

    需要实现的代理:

    - (void)videoPlayerControlDidCloseClick:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"关闭");
    }
    - (void)videoPlayerControlDidPlayClick:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"播放");
    }
    - (void)videoPlayerControlDidPauseClick:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"暂停");
    }
    - (void)videoPlayerControlDidEnterFullScreenClick:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"进入全屏");
    }
    - (void)videoPlayerControlDidShrinkFullScreenClick:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"取消全屏");
    }
    - (void)videoPlayerControlDidChangeProgressValue:(HFVideoPlayerControlView *)videoPlayerController {
        NSLog(@"改变进度");
    }
    

    注意事项:
    状态栏旋转的方法使用的是[[UIApplication sharedApplication] setStatusBarOrientation:(UIInterfaceOrientationLandscapeRight) animated:YES];
    以下两个注意事项都是为了让状态栏能够旋转方向而设置。
    ①:需在info.plist中配置View controller-based status bar appearance的属性设置为NO
    ②:需在播放视频的控制器中重写shouldAutorotate方法,并返回NO

    - (BOOL)shouldAutorotate {
        return NO;
    }
    

    更新:

    解决当前播放器的控制器是受导航控制器UINavigationController控制的时候状态栏无法旋转的问题。

    增加两个对外接口方法- (void)showInWindow;- (void)showInView:(UIView *)view;分别在进入全屏和取消全屏的时候调用,进行切换全屏和小屏的切换。
    然后,导航控制器UINavigationController添加一个分类,实现下面三个方法:

    #import "UINavigationController+Orientation.h"
    
    @implementation UINavigationController (Orientation)
    
    - (BOOL)shouldAutorotate
    {
        return [[self.viewControllers lastObject] shouldAutorotate];
    }
    
    
    - (UIInterfaceOrientationMask)supportedInterfaceOrientations
    {
        return [[self.viewControllers lastObject] supportedInterfaceOrientations];
    }
    
    
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
        return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
    }
    
    @end
    

    这里是demo地址

    相关文章

      网友评论

        本文标题:iOS 视频播放全屏解决方案HFVideoPlayer(解决状态

        本文链接:https://www.haomeiwen.com/subject/oyiuaxtx.html