繁体   English   中英

UIView 添加到横向视图时旋转 90 度

[英]UIView rotated 90 degrees when added to landscape view

我正在开发自定义UIPopoverController 我不是子类,我是从头开始编写自己的NSObject子类。

它的工作原理非常简单。 它将全屏UIView添加到UIWindow以拦截触摸。 在该视图之上,它添加了(较小的)弹出框视图,并将弹出框定位在合适的位置。

我已经在一个肖像 iPad 应用程序中对其进行了测试,它工作正常。 它很好地定位了弹出视图。

但是现在我遇到了一个问题。 我需要在横向 iPad 应用程序中使用它,但是我的弹出窗口 controller 的视图仍然显示纵向而不是横向。 它不会自动旋转(我认为它应该)。

我知道我可以通过设置 transform 属性来手动旋转视图。 但这会让事情变得非常复杂,因为我必须重新计算正确的定位,考虑到 90 度旋转。 有没有办法解决?

让我们看看UIPopoverController在这里做了什么。 从文档中:

如果用户在弹出框可见时旋转设备,弹出框 controller 会隐藏弹出框,然后在旋转结束时再次显示。 弹出框 controller 尝试为您适当地 position 弹出框,但在某些情况下您可能必须再次显示或完全隐藏它。

所以UIPopoverController不会像UIViewController那样旋转它维护的弹出视图。 这是有道理的,考虑到UIPopoverController继承自NSObject ,因此不继承UIViewController处理旋转的代码。

您正在尝试实现自己的UIPopoverController (我不会问为什么,),并且您还继承自NSObject ,因此您不会继承任何会为您旋转视图的代码。 当您将全屏UIView添加到UIWindow时, UIView存在于UIWindow坐标空间中。 当您旋转设备时, UIWindow的坐标空间永远不会改变 为了让您的视图在横向模式下旋转并移动到正确的空间,您必须通过将CGSaffineTransform应用于UIView变换属性来手动执行此操作,也许使用从界面派生的角度计算旋转矩阵状态栏的方向(这是UIViewController会为您做的事情!)

您的自定义UIPopoverController可以管理旋转,但如果可能的话,使用UIViewController子类免费获得它会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM