如何只制作一个子视图?

时间:2017-04-20 03:02:45

标签: xcode uiview uiviewcontroller swift3 subview

我知道有一个问题 Only ONE VIEW landscape mode ,在我提出这个问题之前我已仔细阅读过。

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

默认情况下,播放器在webview的右下角进行压缩,我想在单击播放器的展开按钮时将播放器扩展为横向。

由于webview和播放器在WebViewController.swift中是defind,这就是说在同一个控制器中。我怎样才能让玩家子视图成为风景?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

从我的角度来看,在应用程序中只能修复子视图的一个方向。视图控制器只能有一个方向(横向/纵向)

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

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

答案 2 :(得分: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;         
}

此方法将检查如果您的班级是电影播放器​​,那么它将允许旋转您的视图。当用户在电影播放器​​中按下完成按钮时需要处理