美文网首页
视频播放器全屏旋转实现

视频播放器全屏旋转实现

作者: HQFlying | 来源:发表于2017-04-10 16:08 被阅读111次
    1. 在屏幕旋转的动画中,需要保持播放器之外的界面布局
    2. 全屏切换到小屏,小屏需要回到原先位置
    - (void)enterFullscreen {
        
        if (self.movieView.state != MovieViewStateSmall) {
            return;
        }
        
        self.movieView.state = MovieViewStateAnimating;
        
        /*
         * 记录进入全屏前的parentView和frame
         */
        self.movieView.movieViewParentView = self.movieView.superview;
        self.movieView.movieViewFrame = self.movieView.frame;
        
        /*
         * movieView移到window上
         */
        CGRect rectInWindow = [self.movieView convertRect:self.movieView.bounds toView:[UIApplication sharedApplication].keyWindow];
        [self.movieView removeFromSuperview];
        self.movieView.frame = rectInWindow;
        [[UIApplication sharedApplication].keyWindow addSubview:self.movieView];
        
        /*
         * 执行动画
         */
        [UIView animateWithDuration:0.5 animations:^{
            self.movieView.transform = CGAffineTransformMakeRotation(M_PI_2);
            self.movieView.bounds = CGRectMake(0, 0, CGRectGetHeight(self.movieView.superview.bounds), CGRectGetWidth(self.movieView.superview.bounds));
            self.movieView.center = CGPointMake(CGRectGetMidX(self.movieView.superview.bounds), CGRectGetMidY(self.movieView.superview.bounds));
        } completion:^(BOOL finished) {
            self.movieView.state = MovieViewStateFullscreen;
        }];
        
        [self refreshStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
    }
    
    - (void)exitFullscreen {
        
        if (self.movieView.state != MovieViewStateFullscreen) {
            return;
        }
        
        self.movieView.state = MovieViewStateAnimating;
        
        CGRect frame = [self.movieView.movieViewParentView convertRect:self.movieView.movieViewFrame toView:[UIApplication sharedApplication].keyWindow];
        [UIView animateWithDuration:0.5 animations:^{
            self.movieView.transform = CGAffineTransformIdentity;
            self.movieView.frame = frame;
        } completion:^(BOOL finished) {
            /*
             * movieView回到小屏位置
             */
            [self.movieView removeFromSuperview];
            self.movieView.frame = self.movieView.movieViewFrame;
            [self.movieView.movieViewParentView addSubview:self.movieView];
            self.movieView.state = MovieViewStateSmall;
        }];
        
        [self refreshStatusBarOrientation:UIInterfaceOrientationPortrait];
    }
    
    - (void)refreshStatusBarOrientation:(UIInterfaceOrientation)interfaceOrientation {
        [[UIApplication sharedApplication] setStatusBarOrientation:interfaceOrientation animated:YES];
    }
    
    - (BOOL)shouldAutorotate {
        return NO;
    }
    

    在iOS8.1-8.3上可以通过系统只允许竖屏来避免全屏右半边无法点击的问题;
    具体做法: 在进入视频播放vc时(在viewWillAppear:)中设置-application:supportedInterfaceOrientationsForWindow:的返回值为UIInterfaceOrientationMaskAllButUpsideDown. 然后在viewWillDisappear:中设置-application:supportedInterfaceOrientationsForWindow:返回UIInterfaceOrientationMaskAllButUpsideDown;

    相关文章

      网友评论

          本文标题:视频播放器全屏旋转实现

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