UIWebView中视频播放屏幕自动旋转,app不支持旋转但是某一个页面需要旋转等

在使用UIWebView播放视频的时候,想到视频应该能够旋转播放。但是app本身是不支持旋转的,所以把代码记录如下,引申出来的答案就是:所有的你想要进行页面自动旋转的页面都是可以用这种方法。不说太多的废话,代码如下:

首先在appDelegate中进行代理的设置,这个方法系统在屏幕旋转等的时候会自动调用,不用太多的担心调用时机:

//为视频的旋转做准备的
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if(_isFull)
        return UIInterfaceOrientationMaskAll;
    return UIInterfaceOrientationMaskPortrait;
}

上面的代码为:设置一个app的全局变量_isFull,在需要屏幕旋转的地方把全局变量进行改变并发送相应的通知(通知在下面),会自动调用上面的方法进行屏幕的旋转。

.h代码如下:

{
BOOL _isFull;
}

@property (nonatomic) BOOL isFull;

上面已经将需要的变换代码设置好了,下面要做的就是使用通知在需要旋转屏幕的时候系统自动调用上面的代码:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(vedioStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];// 播放器即将播放通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(vedioFinished:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];// 播放器即将退出通知

上面发送了两个通知,分别为:UIMoviePlayerControllerDidEnterFullscreenNotificationUIMoviePlayerControllerWillExitFullscreenNotification,我使用的是这两个方法,有的网上说使用UIMoviePlayerControllerDidExitFullscreenNotification这个通知,但是我使用之后发现不行,应该使用WillExit这个通知。通知之后的代码如下:

#pragma mark -
#pragma mark 调用视频的通知方法
- (void)vedioStarted:(NSNotification *)notification {// 播放器即将播放处理
ManFromTheStarsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.isFull = YES;
}
- (void)vedioFinished:(NSNotification *)notification {// 视频
ManFromTheStarsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.isFull = NO;
}

上面的方法执行完毕之后,会系统调用一开始在appDelegate里面写的方法,从而通过改变isFull的参数进行屏幕支持方向的改变。


上面已经完成了需要的操作。但是对于ios7开发的人员来说,很可能会遇到另一个问题,那就是状态栏,会在appDelegate中书写如下代码:

//对设备ios6/7进行状态栏的设置
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
// self.window.clipsToBounds = YES;
self.window.frame = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
}

这个时候由于UIWindow的高度进行了限制,是状态栏的20个像素,所以在屏幕翻转的时候会出现翻转过屏幕之后有20像素的黑色空间,而且严重影响app的美观和使用。所以我的解决办法就是:

#pragma mark -
#pragma mark 调用视频的通知方法
- (void)vedioStarted:(NSNotification *)notification {// 播放器即将播放处理
ManFromTheStarsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.isFull = YES;
appDelegate.window.frame = CGRectMake(0, 0, KViewWidth, KViewHeight + 64 + 51);
appDelegate.window.bounds = CGRectMake(0, 0, KViewWidth, KViewHeight + 64 + 51);
}
- (void)vedioFinished:(NSNotification *)notification {// 视频
ManFromTheStarsAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.isFull = NO;
appDelegate.window.frame = CGRectMake(0, 20, KViewWidth, KViewHeight + 64 + 51);
appDelegate.window.bounds = CGRectMake(0, 20, KViewWidth, KViewHeight + 64 + 51);
}

具体的frame和bounds的大小这是我的app 的程序需要,大家可以设置成自己需要的大小,但是有一点,就是在进入全屏的时候,会把self.window.frame.origin.y设置成0,然后在修改成为20在推出全屏之后。

上面的方法适用于UIWebView播放视频的时候需求旋转屏幕的时候。但是在你需要旋转任何一个页面但是app本身不支持旋转的情况下,都是可以适当的改变上面的通知等参数,从而达到自己的目标。

以马内利。愿主可以帮我们尽快的解决我们的bug。

你可能感兴趣的:(视频,UIWebView,屏幕旋转)