ios 在横向模式下全屏播放视频,当我的整个应用程序在纵向模式下锁定时

cigdeys3  于 2023-04-22  发布在  iOS
关注(0)|答案(5)|浏览(154)

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

at0kjp5o

at0kjp5o1#

Swift 3中最简单的解决方案将此添加到您的应用程序委派:

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

eaf3rand2#

我已经在我的应用程序中完成了这个操作。要做到这一点,你需要检查你的viewcontroller,你想在那里播放视频。

  • 你要做的第一件事是在你的项目目标中选中设备方向为纵向,横向左,横向右
  • 在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;
}
8tntrjer

8tntrjer3#

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];

只需在当前视图控制器的- viewDidAppear:中调用它。
另一种方式:
首先,你必须明白,为了在100多个横向视图中打开一个视图,你的应用应该允许横向和纵向界面。默认情况下是这样的,但你可以在目标的设置,常规选项卡,部署信息部分检查它
然后,因为您允许整个应用程序的横向和纵向,所以您必须告诉每个仅纵向的UIViewController它不应该自动旋转,并添加此方法的实现:

- (BOOL)shouldAutorotate {
    return NO;
}

最后,对于你的特定的只支持landscape的控制器,因为你说你是以模态的方式呈现它,你可以只实现这些方法:

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

-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

希望这会有所帮助:)

gzszwxb4

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
}

就这样,伙计们。

ocebsuys

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)

它会像魔咒一样奏效

相关问题