我想在全屏的横向模式下播放视频。我的应用程序是锁定在纵向模式。如何实现这一点。请帮助我。提前感谢
at0kjp5o1#
Swift 3中最简单的解决方案将此添加到您的应用程序委派:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { if window == self.window { return .portrait } else { return .allButUpsideDown } }
eaf3rand2#
我已经在我的应用程序中完成了这个操作。要做到这一点,你需要检查你的viewcontroller,你想在那里播放视频。
-(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; }
8tntrjer3#
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft]; [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
只需在当前视图控制器的- viewDidAppear:中调用它。另一种方式:首先,你必须明白,为了在100多个横向视图中打开一个视图,你的应用应该允许横向和纵向界面。默认情况下是这样的,但你可以在目标的设置,常规选项卡,部署信息部分检查它然后,因为您允许整个应用程序的横向和纵向,所以您必须告诉每个仅纵向的UIViewController它不应该自动旋转,并添加此方法的实现:
- viewDidAppear:
UIViewController
- (BOOL)shouldAutorotate { return NO; }
最后,对于你的特定的只支持landscape的控制器,因为你说你是以模态的方式呈现它,你可以只实现这些方法:
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeLeft; // or Right of course } -(UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }
希望这会有所帮助:)
gzszwxb44#
在盯着这个页面看了几乎一整天之后,我终于想出了一个节省所有人工作时间的解决方案,转到项目导航器,选择您的项目,然后在General中仅选择设备方向中的potrait。同时确保你使用了一个modalsegue来显示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 }
就这样,伙计们。
ocebsuys5#
将此文件添加到项目中
import UIKit final class DeviceOrientation { static let shared: DeviceOrientation = DeviceOrientation() // MARK: - Private methods @available(iOS 13.0, *) private var windowScene: UIWindowScene? { return UIApplication.shared.connectedScenes.first as? UIWindowScene } // MARK: - Public methods func set(orientation: UIInterfaceOrientationMask) { if #available(iOS 16.0, *) { windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: orientation)) } else { UIDevice.current.setValue(orientation.toUIInterfaceOrientation.rawValue, forKey: "orientation") } } var isLandscape: Bool { if #available(iOS 16.0, *) { return windowScene?.interfaceOrientation.isLandscape ?? false } return UIDevice.current.orientation.isLandscape } var isPortrait: Bool { if #available(iOS 16.0, *) { return windowScene?.interfaceOrientation.isPortrait ?? false } return UIDevice.current.orientation.isPortrait } var isFlat: Bool { if #available(iOS 16.0, *) { return false } return UIDevice.current.orientation.isFlat } } extension UIInterfaceOrientationMask { var toUIInterfaceOrientation: UIInterfaceOrientation { switch self { case .portrait: return UIInterfaceOrientation.portrait case .portraitUpsideDown: return UIInterfaceOrientation.portraitUpsideDown case .landscapeRight: return UIInterfaceOrientation.landscapeRight case .landscapeLeft: return UIInterfaceOrientation.landscapeLeft default: return UIInterfaceOrientation.unknown } } }
我们如何使用它?
DeviceOrientation.shared.set(orientation: .landscapeRight)
它会像魔咒一样奏效
5条答案
按热度按时间at0kjp5o1#
Swift 3中最简单的解决方案将此添加到您的应用程序委派:
eaf3rand2#
我已经在我的应用程序中完成了这个操作。要做到这一点,你需要检查你的viewcontroller,你想在那里播放视频。
8tntrjer3#
只需在当前视图控制器的
- viewDidAppear:
中调用它。另一种方式:
首先,你必须明白,为了在100多个横向视图中打开一个视图,你的应用应该允许横向和纵向界面。默认情况下是这样的,但你可以在目标的设置,常规选项卡,部署信息部分检查它
然后,因为您允许整个应用程序的横向和纵向,所以您必须告诉每个仅纵向的
UIViewController
它不应该自动旋转,并添加此方法的实现:最后,对于你的特定的只支持landscape的控制器,因为你说你是以模态的方式呈现它,你可以只实现这些方法:
希望这会有所帮助:)
gzszwxb44#
在盯着这个页面看了几乎一整天之后,我终于想出了一个节省所有人工作时间的解决方案,
转到项目导航器,选择您的项目,然后在General中仅选择设备方向中的potrait。
同时确保你使用了一个modalsegue来显示landscapeController。
现在在你的控制器中添加这个,在你想要的风景模式。
就这样,伙计们。
ocebsuys5#
将此文件添加到项目中
我们如何使用它?
它会像魔咒一样奏效