我正在开发自定义UIPopoverController
。我不是子类,我是从头开始编写自己的NSObject
子类。
它非常简单。它会向UIView
添加全屏UIWindow
以拦截触摸。在该视图上方,它添加了(较小的)弹出视图,并将弹出窗口定位在合适的位置。
我在一个portraid iPad应用程序中测试过,它运行正常。它很好地定位了弹出视图。
但是现在我遇到了一个问题。我需要在风景iPad应用程序中使用它,但我的popover控制器的视图仍然显示纵向而不是横向。它不会自动旋转(我认为应该这样)。
我知道我可以通过设置transform属性手动旋转视图。但是这会使事情变得非常复杂,因为我将不得不重新计算正确的定位,考虑90度旋转。有没有办法解决这个问题?
答案 0 :(得分:1)
让我们来看看 UIPopoverController 在这里做了些什么。来自文档:
如果用户在弹出窗口可见时旋转设备,则弹出窗口 控制器隐藏弹出框,然后在结束时再次显示它 回转。弹出控制器尝试定位弹出窗口 适合你,但你可能需要重新呈现或隐藏它 在某些情况下完全一样。
所以 UIPopoverController 不会旋转它维护的弹出视图,就像 UIViewController 那样。考虑到 UIPopoverController 继承自 NSObject ,这是有道理的,因此不会继承处理旋转的 UIViewController 代码。
您正在尝试实现自己的 UIPopoverController (我不会问为什么!),并且您还继承自 NSObject ,因此您不继承代码这将为您旋转视图。将全屏 UIView 添加到 UIWindow 时, UIView 存在于 UIWindow 坐标空间内。旋转设备时, UIWindow 的坐标空间永远不会更改。为了在横向模式下旋转视图并将其移动到正确的空间,您必须通过将 CGSAffineTransform 应用到您的转换属性来手动执行此操作。 UIView ,也许使用从状态栏的界面方向派生的角度来计算旋转矩阵(这是 UIViewController 会为你做的事情!)< / p>
您的自定义 UIPopoverController 可以管理旋转,但如果可能的话,使用 UIViewController 子类免费获取它会更容易。