- 在屏幕旋转的动画中,需要保持播放器之外的界面布局
- 全屏切换到小屏,小屏需要回到原先位置
- (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
;