【问题标题】:Screen rotation won't rotate back to original state [closed]屏幕旋转不会旋转回原始状态[关闭]
【发布时间】:2014-07-22 21:40:30
【问题描述】:

我正在制作一个新闻应用程序,该应用程序的一个重要功能是提供可以播放视频的视图。所以我在 cocoacontrols.com 上查找并找到了这个控件:https://github.com/0xced/XCDYouTubeKit

我让这个插件运行良好,但现在问题开始了:

对于这个应用程序,方向需要始终是纵向的。没有风景或颠倒。这里的问题是您还需要观看纵向视频。没有人想要的东西吗?每个人都想横向观看视频!

现在我找到了一些对我有很大帮助的代码,并将XCDYouTubeVideoPlayerViewController 设置为可用于纵向和横向:

在我的 appDelegate 中添加以下代码:

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

    if ([[self.window.rootViewController presentedViewController]
         isKindOfClass:[XCDYouTubeVideoPlayerViewController 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:[XCDYouTubeVideoPlayerViewController class]]) {
                return UIInterfaceOrientationMaskAllButUpsideDown;

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

这段代码运行良好。视频可以纵向播放,也可以横向播放。 现在,当视频以横向结束或用户以横向结束视频并返回到他们来自应用程序的视图时,将以横向显示。我必须将我的设备转为纵向以便它会一直这样。

问题是:如何编辑上述代码,以便在视频以横向结束或用户以横向结束视频时禁用横向。它只需要在视频结束时恢复纵向并返回!

【问题讨论】:

  • 正如我在回答中解释的那样,- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 不是指定方向的正确位置。首先,我怀疑您的应用程序中实际上有超过 1 UIWindow。大多数应用程序没有。因此,您在不同的时间给supportedInterfaceOrientationsForWindow 赋予不同的值会混淆iOS。您应该将该方法视为等同于 plist: static。
  • 我投票结束这个问题,因为它不再相关。代码过时的老问题。请删除此问题。
  • @Cœur 和其他亲密的选民:事实上,某些东西违反了某些其他网站的服务条款,甚至在某些司法管辖区是非法的,并没有使其本质上偏离-堆栈溢出的主题。请解释这个问题离题的正当理由。
  • @Cœur 根据模组无效:see this meta post

标签: objective-c xcode ios7 uiinterfaceorientation screen-rotation


【解决方案1】:

删除该代码!

来自文档:

application:supportedInterfaceOrientationsForWindow:

此方法返回应用程序支持的界面方向的总集。在确定是否旋转特定视图控制器时,此方法返回的方向与根视图控制器或最顶层呈现的视图控制器支持的方向相交。应用程序和视图控制器必须在允许旋转之前达成一致。

如果你不实现这个方法,应用会使用应用的 Info.plist 的 UIInterfaceOrientation 键中的值作为默认的界面方向。

你应该改用这个:

- (NSUInteger)supportedInterfaceOrientations 在你的UIViewController

当用户改变设备方向时,系统会在根视图控制器或填充窗口的最顶部呈现的视图控制器上调用此方法。如果视图控制器支持新方向,则窗口和视图控制器将旋转到新方向。仅当视图控制器的 shouldAutorotate 方法返回 YES 时才会调用此方法。

【讨论】:

  • 您还可以从这两个其他答案中获得启发:它们涵盖了您的所有定向需求:stackoverflow.com/questions/24703427/… 和我的回复 stackoverflow.com/questions/12410031/…
  • 我明白你的回答和我应该怎么做,但它就是行不通。基本上你说的是:删除所有代码。转到视图应始终为纵向的 ViewController 并输入以下代码: - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } 或???
  • 基本上是的:每个视图控制器负责其方向。
  • 好吧,当我尝试将该代码添加到每个视图时,它不起作用。视图不会在 XCDYouTubeVideoPlayerViewController 上旋转。让我们聊聊,这样我就可以解释我的工作了!
【解决方案2】:

在您的- (NSUInteger)application:supportedInterfaceOrientationsForWindow 中,将“self.window”替换为“window”。

【讨论】:

  • 不起作用。当我关闭视频时,视图将保持在横向......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多