在使用MPMoviePlayerController實現播放器播放時,發現不能全屏播放,原來是因為項目不支持橫屏,把支持橫屏的選項勾住就OK啦,但是其他頁面不支持橫屏,這個方法就行不通了。
在網上找了很多的資料,很多都是在iOS 6之后就舍棄的,都沒用,下面我就來介紹下,在不支持橫屏的情況下,實現視頻播放器的全屏播放。
1、
首先在AppDelegate.h 定義@property (nonatomic, assign) BOOL allowRotation; // 標記是否可以旋轉
2、
同時在AppDelegate.m中實現這個方法,需要返回個支持屏幕轉向,做個簡單的判斷,是否支持橫豎屏,是的話返回UIInterfaceOrientationMaskAll,否則返回UIInterfaceOrientationMaskPortrait。返回的是個枚舉,其中各種值的意思這里不做介紹了。
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)nowWindow {
// 是非支持橫豎屏
if (_allowRotation) {
return UIInterfaceOrientationMaskAll;
} else{
return UIInterfaceOrientationMaskPortrait;
}
}
3、
在需要全屏的控制器中需要設置 allowRotation為YES,然后就可以實現橫豎屏的自動轉換了。
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.allowRotation = YES;
4、
注意在返回其他界面時,要設置allowRotation為NO.
// 設置不支持橫屏
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.allowRotation = NO;
5、
還有個問題需要注意,當橫屏的時候,可能會出現導航條,這時要是按下返回按鈕或者去其他界面的按鈕,到了其他界面也是橫屏。所以要在橫屏播放視頻的時候,隱藏導航條。我用的是通知隱藏導航條,有其他的方法也行,歡迎提出。
首先回到AppDelegate.m文件中剛才的協議代理方法中添加通知
// 添加通知 橫屏不出現導航條
[[NSNotificationCenter defaultCenter] postNotificationName:@"hideNav" object:nil];
然后在需要橫屏的那個播放器的控制器中接受通知,實現方法,當橫屏時候,隱藏導航條。在這里需要做個橫豎屏的判斷,我是根據屏幕的寬高來判斷的,同樣也有很多其他的方法都可以實現。
// 接受通知 判斷導航條是否隱藏
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideN) name:@"hideNav" object:nil];
#pragma mark - 接受通知 判斷導航條是否隱藏
- (void)hideN{
if ([UIScreen mainScreen].bounds.size.width > [UIScreen mainScreen].bounds.size.height) {
// 橫屏隱藏
self.navigationController.navigationBarHidden = YES;
}else{
// 豎屏顯示
self.navigationController.navigationBarHidden = NO;
}
}
好了,這下就解決了在不支持橫屏時,可以全屏播放的功能了,希望可以幫到大家。