如何将视图从纵向模式更改为横向模式并锁定它?
Posted
技术标签:
【中文标题】如何将视图从纵向模式更改为横向模式并锁定它?【英文标题】:how to change a view from portrait mode to landscape mode and lock it? 【发布时间】:2017-05-04 02:54:11 【问题描述】:我有一个在右下视口以纵向模式压缩的电影视图。当用户展开电影视图时,电影视图将在横向模式下扩展到全屏。我还想在全屏时将电影视图锁定为横向模式,无论设备是什么方向。
注意:我所有的其他视图都是纵向模式。
我已经用这个代码引用了这个post,
应用设置,
AppDelegate.swift
internal var shouldRotate = false
func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
return shouldRotate ? .allButUpsideDown : .portrait
视图控制器,
func expandPlayerWindow(button: UIButton)
self.player.view.frame = CGRect(x:0, y:-20, width: UIScreen.main.bounds.maxY, height: UIScreen.main.bounds.maxX)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
print(appDelegate.shouldRotate)
print(self.supportedInterfaceOrientations)
appDelegate.shouldRotate = true // or false to disable rotation
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
print(appDelegate.shouldRotate)
print(self.supportedInterfaceOrientations)
appDelegate.shouldRotate = false
print(appDelegate.shouldRotate)
print(self.supportedInterfaceOrientations)
UIApplication.shared.isStatusBarHidden = false
日志,
false
UIInterfaceOrientationMask(rawValue: 26)
true
UIInterfaceOrientationMask(rawValue: 26)
false
UIInterfaceOrientationMask(rawValue: 26)
我在 setorientation 之前将 shouldRotate 设置为 true,这使得视图可以更改为横向模式。在设置方向后,我将 shoudRotate 设置为 false 以禁用旋转。然后我测试它,当我单击按钮时,电影视图变为横向,之后我旋转我的设备,电影视图变为纵向,并锁定为纵向模式而不是横向模式。
【问题讨论】:
电影视图的父视图怎么样。您是否也阻止它们旋转? 是的,我认为阻止它们比电影视图更容易。 您的电影视图是视图控制器的视图吗?视图控制器是否在每种模式下返回正确的 shouldAutorotate 和 supportedInterfaceOrientations 值? 电影视图有父视图,如果是视图控制器的视图,则父视图。我已经检查了这些并在问题中进行了编辑。检查一下。 【参考方案1】:是这个功能造成的,
func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
return shouldRotate ? .allButUpsideDown : .portrait
将.allButUpsideDown
更改为.landscape
即可。
可行的代码,
AppDelegate.swift
func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
return shouldRotate ? .landscape : .portrait
视图控制器,
func expandPlayerWindow()
self.player.view.frame = CGRect(x:0, y:-20, width: UIScreen.main.bounds.maxY, height: UIScreen.main.bounds.maxX)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldRotate = true // or false to disable rotation
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
appDelegate.shouldRotate = true
UIApplication.shared.isStatusBarHidden = true
【讨论】:
以上是关于如何将视图从纵向模式更改为横向模式并锁定它?的主要内容,如果未能解决你的问题,请参考以下文章