【问题标题】:Play video fullscreen in landscape mode, when my entire application is in lock in portrait mode当我的整个应用程序锁定在纵向模式时,以横向模式全屏播放视频
【发布时间】:2016-08-14 02:06:27
【问题描述】:

我想以横向模式全屏播放视频。 我的应用程序锁定在纵向模式。 如何实现这一点。请帮我。 提前致谢

【问题讨论】:

    标签: ios objective-c landscape uiinterfaceorientation


    【解决方案1】:
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
    

    只需在呈现的视图控制器的- viewDidAppear: 中调用它即可。

    另一种方式:

    首先,您必须了解,即使只打开 100 多个横向视图中的一个,您的应用也应该允许横向和纵向界面方向。默认情况下是这种情况,但您可以在目标的设置、常规选项卡、部署信息部分中检查它

    然后,因为您允许整个应用程序同时使用横向和纵向,您必须告诉每个仅纵向的UIViewController 它不应该自动旋转,添加此方法的实现:-

    - (BOOL)shouldAutorotate {
        return NO;
    }
    

    最后,对于您的特定横向控制器,并且因为您说您是以模态方式呈现它,您可以实现这些方法:-

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
        return UIInterfaceOrientationLandscapeLeft; // or Right of course
    }
    
    -(UIInterfaceOrientationMask)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskLandscape;
    }
    

    希望这会有所帮助:)

    【讨论】:

    • 我的视图旋转完美,但视频无法横向播放。请检查我的截图。 @狮子
    • 根据您的屏幕截图,viewcontroller 没有横向旋转。所以试试我的回答。允许 autorotatingvideoPlayerViewController 并为该 videoplayerviewcontroller 设置横向横向
    【解决方案2】:

    我已经在我的应用程序中完成了这项工作。为此,您需要检查要在其中播放视频的视图控制器。

    • 您要做的第一件事是在项目目标中检查设备方向到纵向、横向左侧、横向右侧

    • 在您的 AppDelegate 中执行以下代码

      -(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
      
          UIStoryboard *mainStoryboard;
          if (IS_IPHONE) {
              mainStoryboard= [UIStoryboard storyboardWithName:@"Main" bundle: nil];
          }
          else{
             mainStoryboard= [UIStoryboard storyboardWithName:@"Main_iPad" bundle: nil];
          }
      
          ViewControllerThatPlaysVideo *currentViewController=    ViewControllerThatPlaysVideo*)[mainStoryboard     instantiateViewControllerWithIdentifier:@"postDetailView"];
          if(navigationController.visibleViewController isKindOfClass:    [ViewControllerThatPlaysVideo class]]){
             if([currentViewController playerState])
                  return UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationMaskPortrait;
             return UIInterfaceOrientationMaskPortrait;
          }
          return UIInterfaceOrientationMaskPortrait;
      }
      

    【讨论】:

    • 这个是完美的答案。
    • @Pratik Jamariya:非常感谢。你节省了我的时间。
    • 您在上述代码中所指的playerstate 是什么?是关于视频播放器的状态吗?
    • @PradeepReddyKypa 是的,我指的是视频播放器状态,视频是否正在播放、暂停、停止、缓冲等。
    • 我可以在appdelegate中调用navigationController
    【解决方案3】:

    swift 3 中最简单的解决方案 将此添加到您的应用委托:

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        if window == self.window {
            return .portrait
        } else {
            return .allButUpsideDown
        }
    }
    

    【讨论】:

    • 伙计,你太棒了!简单而优雅的解决方案。你拯救了我的一天。谢谢。
    • 这太棒了!不过,我遇到了一个奇怪的错误。如果用户在仍处于横向状态时单击视频,则所有视图控制器的导航栏都会向上移动 30 像素左右。对此有什么解决办法吗?
    • 我已经发布了我的答案above (Accepted :P),但现在我使用像你这样的新方法,但在 ObjC 中。
    • @Groovietunes 我在我的一个应用程序中遇到了和你一样的问题,你能告诉我你如何关闭/删除你的播放器窗口吗?我可以帮你解决这个问题
    • @Eyzuky 好点。基本思想很棒。检查是否是正确窗口的详细逻辑可能因应用程序而异。谢谢!
    【解决方案4】:

    盯着这个页面看了差不多一整天,我终于想出了一个适合所有人的节省工作时间的解决方案,

    转到项目导航器,选择您的项目,然后在“一般”中选择设备方向中的 potrait

    还要确保您使用 modal segue 来显示 LandscapeController。

    现在将它添加到您想要横向模式的控制器中。

    override func viewWillAppear(_ animated: Bool) {
    
        super.viewWillAppear(true)
    }
    
    override var shouldAutorotate: Bool {
    
        return false
    }
    
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    
        return .landscapeRight
    }
    
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    
        return .landscapeRight
    }
    

    就是这样,伙计们。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多