我有一个应用程序需要一直处于纵向模式,除非在播放视频时。为了在我的项目设置中为VideoController启用横向模式,我已启用支持的所有方向模式。
然而,这允许我的其他控制器也旋转。为了解决这个问题,我将以下内容添加到我的根UINavigationController
:
- (BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
return UIInterfaceOrientationMaskLandscape;
}
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
return UIInterfaceOrientationLandscapeLeft;
}
return UIInterfaceOrientationPortrait;
}
现在我有两个问题:
应用程序的正常屏幕遵循限制并保持纵向。但是,无论是否破坏UI,状态栏都会更改方向。如果设备以横向模式转动,我将在面向纵向的屏幕上设置面向横向的状态栏。我该如何解决这个问题,以便状态栏保持不变?
我为视频播放时设置了首选横向。这不起作用,preferredInterfaceOrientationForPresentation
似乎根本没有被调用。我做错了什么或者我错过了什么?
更新
我修正了1.将以下内容添加到我的AppDelegate
:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if([[VideoPlaybackManager sharedManager] videoIsPlaying]) {
return UIInterfaceOrientationMaskAll;
}
return UIInterfaceOrientationMaskPortrait;
}
问题2但是仍然存在。当我开始播放视频时,它不会以横向方向开始。有什么想法吗?
任何帮助将不胜感激! 谢谢!
答案 0 :(得分:0)
AppDelegate.m中的此代码将提供帮助
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
UIViewController *topScreen = self.window.rootViewController;
while (topScreen.presentedViewController) {
topScreen = topScreen.presentedViewController;
}
return topScreen.supportedInterfaceOrientations;
}