美文网首页
特定界面横屏

特定界面横屏

作者: 山已几孑 | 来源:发表于2017-06-23 18:18 被阅读0次

最近遇到视频的需求,里面有全屏,因此研究了一下全屏的问题,

需求

  • 进界面的时候是竖屏
  • 进入 播放界面是竖屏
  • 播放界面中可以自动翻转

解决方案

其中纠结的部分就不提了,直接说解决方案吧

需求1

需求1的重点在于,让app支持横屏,但是进入界面的时候是竖屏
首先,通过设置TARGETS - General - Deployment info - Device orientation 的选项为第一个

25A3174B-677C-4531-B9E3-4C5BDC0EBC66.png

然后在AppDelegate中添加一下代理

   func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    //设置app支持的屏幕模式
    return [.portrait, .landscapeLeft, .landscapeRight]
}

需求2

其实就是出了播放页面外,所有页面都是竖屏
viewController 有以下几个属性可供重写,通过重写这几个方法,来实现界面的横屏或竖屏
@available(iOS 6.0, *) //屏幕自动翻转
open var shouldAutorotate: Bool { get }

  @available(iOS 6.0, *) // 当前界面支持的屏幕方向
  open var supportedInterfaceOrientations: UIInterfaceOrientationMask { get }

  // Returns interface orientation masks.
  @available(iOS 6.0, *) //初始屏幕方向,--但是实际上看意义不大
  open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { get }

经过查坑发现,VC里面重写的方法并不是都能调用,因为被NavigationController和TabbarController给拦截了,需要在NavigationController和TabbarController中添加一下方法

如果没有用到nav或者tab,就不用重写了

  • ViewController

    override var shouldAutorotate: Bool
    {
      return true
    }
    
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask
    {
      return [.portrait, .landscapeRight, .landscapeLeft]
    }
    
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation
      {
      return .landscapeLeft
    }
    
  • NavigationController

     override var shouldAutorotate: Bool
    {
      if let top = topViewController {
          return top.shouldAutorotate
      }
      return false
    }
    
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask
    {
      if let top = topViewController {
          return top.supportedInterfaceOrientations
      }
      return .portrait
    }
    
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation
        {
      //测试着不怎么管用,不知道为什么,
      if let top = topViewController {
          return top.preferredInterfaceOrientationForPresentation
      }
      return .portrait
    }
    
  • TabbarController

    open override var shouldAutorotate: Bool
    {
      if let vc = selectedViewController {
          return vc.shouldAutorotate
      }
      return false
    }
    
    open override var supportedInterfaceOrientations: UIInterfaceOrientationMask
    {
      if let vc = selectedViewController {
          return vc.supportedInterfaceOrientations
      }
      return .portrait
    }
    

通过重写navtab里面的方法,调用VC里面重写的方法。

需求3

其实上面就已经实现了需求3的基本效果,如果再多说点,就是得加个屏幕翻转的监听,来实现刷新界面之类的操作了--!废话不多说,关门放代码:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(onDeviceOrientationChange), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}

deinit {
    NotificationCenter.default.removeObserver(self)
}

func onDeviceOrientationChange()  {
    //界面方向发生变化
    let orientation = UIDevice.current.orientation
    let interfaceOrientation = UIInterfaceOrientation(rawValue: orientation.rawValue)
    
    //该去做什么就去做什么吧
}

总结-到此,该有的功能就都有了,虽然感觉极其繁琐,同样,有过谁发现更好的办法,顺便告诉我一声,不胜感激~。

相关文章

  • 特定界面横屏

    最近遇到视频的需求,里面有全屏,因此研究了一下全屏的问题, 需求 进界面的时候是竖屏 进入 播放界面是竖屏 播放界...

  • iOS 特定界面横屏处理

    1. 项目全局设备方向设置: 首先全局开关要开所有支持的方向,否则就算页面内部支持了,也是没有效果。 2. 指定页...

  • 视频播放支持横屏

    应用整体只支持竖屏,只有特定的某个界面支持横屏 解决方法: 1.在项目中plist文件中设置支持转屏方向 转屏控制...

  • iOS 视频横竖屏窗口解决方案

    1.其他界面是竖屏,有个界面只支持横屏 #pragma mark 强制横屏的方法 - (BOOL)shouldAu...

  • 屏幕横竖屏处理

    在APP开发中,我们经常遇到某些界面需要横屏处理,一般情况是APP整体竖屏展示,只有极个别界面横屏界面。最近在做视...

  • iOS 部分界面强制屏幕横屏

    不赘述直接切入本次话题部分界面屏幕横屏 因为是部分界面屏幕横屏故我们先设置项目只能竖屏,如下:在AppDelega...

  • 单个界面横屏

    AppDelegate @property (nonatomic, assign) NSInteger rotat...

  • 横屏显示界面

    选择project -> targets -> general下面的deployment info里面的portr...

  • Fragment 使用方式及进阶

    在一些特定 UI 实现需求中,比如滑动切换视图、或者横屏左 item 右 message 的信息展示界面,使用 F...

  • 横竖屏

    需求: 让push的ViewController界面强制横屏 一、配置 二、添加强制横屏方法 pragma mar...

网友评论

      本文标题:特定界面横屏

      本文链接:https://www.haomeiwen.com/subject/jqgccxtx.html