如何只制作一个子视图景观?
how to make only a subview landscape?
我知道有一个类似的问题Only ONE VIEW landscape mode,在问这个之前我已经仔细阅读了
我的应用程序中有一个名为 webview 的 WKWebview,并且该 webview 有一个名为 player 的子视图。我用webview加载网页,播放器播放视频。
默认情况下,播放器被压缩在webview的右下角,我想在点击播放器的展开按钮时将播放器展开为横向。
由于 webview 和 player 在 WebViewController.swift 中定义,也就是说在同一个控制器中。我怎样才能将播放器子视图设置为横向?
在我看来,不能只为应用程序中的子视图固定一个方向。视图控制器只能有一个方向 (landscape/portrait)
您可以将虚拟视频控制器放在屏幕的右下角,然后在其上方放置按钮或其他东西(可点击对象)。当您单击按钮或可点击对象时,您可以显示一个新的视图控制器,您可以在其中仅以横向模式播放视频。
视频播放完毕后,您可以关闭视图控制器。
您可以尝试多个 UIWindow
。每个 UIWindow
都可以有自己的根视图控制器。所以可以有一个 window 旋转,另一个不旋转。我自己使用过这种方法,它对我非常有效。使您的 "subview" 成为独立的 UIWindow
可能非常困难,但我认为值得尝试。希望这些信息有所帮助。
当您的应用程序收到如下所示的方向更改调用时,您可以检查 class。
#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;
}
此方法将检查您的 class 是否为电影播放器,然后它将允许旋转您的视图。当用户在电影播放器中按下完成按钮时需要处理
我知道有一个类似的问题Only ONE VIEW landscape mode,在问这个之前我已经仔细阅读了
我的应用程序中有一个名为 webview 的 WKWebview,并且该 webview 有一个名为 player 的子视图。我用webview加载网页,播放器播放视频。
默认情况下,播放器被压缩在webview的右下角,我想在点击播放器的展开按钮时将播放器展开为横向。
由于 webview 和 player 在 WebViewController.swift 中定义,也就是说在同一个控制器中。我怎样才能将播放器子视图设置为横向?
在我看来,不能只为应用程序中的子视图固定一个方向。视图控制器只能有一个方向 (landscape/portrait)
您可以将虚拟视频控制器放在屏幕的右下角,然后在其上方放置按钮或其他东西(可点击对象)。当您单击按钮或可点击对象时,您可以显示一个新的视图控制器,您可以在其中仅以横向模式播放视频。
视频播放完毕后,您可以关闭视图控制器。
您可以尝试多个 UIWindow
。每个 UIWindow
都可以有自己的根视图控制器。所以可以有一个 window 旋转,另一个不旋转。我自己使用过这种方法,它对我非常有效。使您的 "subview" 成为独立的 UIWindow
可能非常困难,但我认为值得尝试。希望这些信息有所帮助。
当您的应用程序收到如下所示的方向更改调用时,您可以检查 class。
#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;
}
此方法将检查您的 class 是否为电影播放器,然后它将允许旋转您的视图。当用户在电影播放器中按下完成按钮时需要处理