仅横向视图中的iOS视频

时间:2014-09-21 12:40:09

标签: ios objective-c

我正在使用xcode开发一个新的应用程序,该应用程序是纵向视图,但视频应该能够处于纵向和横向视图中。我编写了这段代码,但它不能100%运行

AppDelegate.h

#import <MediaPlayer/MediaPlayer.h>
@property (strong, nonatomic) MPMoviePlayerViewController *VideoPlayer;

AppDelegate.m

@synthesize VideoPlayer;

- (NSUInteger)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window {

    if ([[self.window.rootViewController presentedViewController]
         isKindOfClass:[MPMoviePlayerViewController class]]) {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    } else {

        if ([[self.window.rootViewController presentedViewController]
             isKindOfClass:[UINavigationController class]]) {

            // look for it inside UINavigationController
            UINavigationController *nc = (UINavigationController *)[self.window.rootViewController presentedViewController];

            // is at the top?
            if ([nc.topViewController isKindOfClass:[MPMoviePlayerViewController class]]) {
                return UIInterfaceOrientationMaskAllButUpsideDown;

                // or it's presented from the top?
            } else if ([[nc.topViewController presentedViewController]
                        isKindOfClass:[MPMoviePlayerViewController class]]) {
                return UIInterfaceOrientationMaskAllButUpsideDown;
            }
        }
    }

    return UIInterfaceOrientationMaskPortrait;
}

此代码的问题在于,如果用户在横向模式下观看视频时关闭视频播放器,即使我在关闭视频播放器(应用程序在横向视图中)中禁用了Xcode GUI,整个应用也会转为横向视图用户将设备旋转为纵向,切换到纵向视图,然后保持纵向(无论设备旋转)。即使用户在横向模式下观看视频时关闭视频播放器,如何才能将该应用切换为纵向视图?

谢谢!

2 个答案:

答案 0 :(得分:1)

经过长时间的研究,我终于找到了解决方案。

1)启用应用程序的所有方向。 enter image description here

2)对您的根导航控制器进行子类化,并实现这2个方法

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

3)MPMoviePlayerViewController的子类

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

4)现在你应该呈现子类化的MoviePlayerController,所有的东西都应该有效!

答案 1 :(得分:0)

通过在AppDelegate中添加该功能,你几乎做对了。唯一的问题是,当用户从横向视频回来时,该应用程序将成为视频。解决方案就在这里:

UIViewController *vc = [[self.window.rootViewController presentedViewController];
if ([vc isKindOfClass:[MPMoviePlayerViewController class]] &&
    ![vc isBeingDismissed]) {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

这里的关键是仔细检查呈现的视图控制器是否正在解除(退出)。