2017-04-20 42 views
5

我知道有一个类似的问题Only ONE VIEW landscape mode,在我问这个问题之前,我已仔细研究过它。如何仅制作一个子视图?

我在我的应用程序中有一个名为webview的WKWebview,并且webview有一个名为播放器的子视图。我使用webview加载网页,玩家播放视频。

默认情况下,播放器压缩在webview的右下角,我想要将播放器展开到风景,当我单击播放器的展开按钮时。

由于webview和播放器是在WebViewController.swift中定义的,也就是说在同一个控制器中。我怎样才能使播放器子视图景观?

+0

http://stackoverflow.com/questions/24928057/only-one-view-landscape-mode –

回答

6

您可以尝试多个UIWindow。每个UIWindow都可以拥有自己的根视图控制器。所以有可能有一个窗口可以旋转,另一个窗口不可以。我自己使用了这种方法,它对我非常有效。将您的“子视图”设置为独立的UIWindow可能非常困难,但我认为这值得尝试。希望这些信息有帮助。

3

从我的角度来看,不能只为应用程序中的子视图定位一个方向。视图控制器只能有一个方向(风景/人像)

您可以将虚拟视频控制器放置在屏幕的右下角,在上方可以放置按钮或别的东西(可点击的对象)。当您点击按钮或可点击对象时,您可以呈现一个新的视图控制器,您只能在横向模式下播放视频。

视频播放完毕后,您可以关闭视图控制器。

2

当您的申请收到如下所示的方向更改呼叫时,您可以检查课程。

#pragma mark - Orientations Methods 
- (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;   
} 

这种方法将检查,如果你的课是电影播放器​​,那么它将允许旋转你的视图。你需要处理当用户按下完成按钮在电影播放器​​

相关问题