[英]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.