3

我有一些真正的问题,理解为什么我的观点中心表现得像这样,完全放弃了设备的方向(而我本来很好的谷歌技能什么也没做)......我了解框架,边界和中心如何相互关联/superviews 等(这是一个很好的解释)。

所以,我有几个 ViewController(称它们为A & B)。BA以“模态”方式呈现,使用“Cover Vertical”-transition (真的不那么相关,但谁知道......)。

现在,运行以下代码

self.view.center = CGPointMake(self.view.frame.size.width * 0.5f, self.view.frame.size.height * 0.5f + 100);

在任何视图控制器内(由按下按钮触发),将在除纵向(纵向“向上”)之外的所有方向上以错误的方向移动视图。基本上纵向会将视图向下移动 100 像素(是的!),横向将向左或向右移动 100 像素,而颠倒将向上移动 100 像素。查看手中的设备,它会将视图从每个方向的同一物理侧移动 100 像素(用于视觉参考)。

我是否在这里遗漏了一些非常明显的东西,使用了一些奇怪的设置,或者这只是预期的行为?(我希望这是第一个或第二个)。

在我看来,x 始终是水平的,y 对于所有方向始终是垂直的,并且这是在较低级别(由操作系统)管理的。

所以,请指出显而易见的事情,并以我为代价开怀大笑!:)

编辑。

好的,所以我开始了一个空项目(只有一个视图),行为是一样的。但后来我在 IB 中拖入了一个导航控制器,将主控制器 ( A ) 设置为 root。Simsalabim 是的,它的行为与我想要的一样... Ofc 我可以删除导航栏,它看起来一样。我知道“窗口”和根视图控制器一起工作以设置方向(视图控制器确定是否允许等),但这是要走的路吗?为什么它不适用于单个 ViewController?或者,如果您的初始 ViewController 只是一个普通的“视图控制器”,您是否只是希望 UIView.center 表现得“奇怪”?或者你总是有一个navigationController作为初始点?脑袋……疼……

编辑 2。

好的,所以框架/边界何时返回什么似乎是零一致性。基本上,如果您有一个简单的 ViewController 作为初始控制器(例如,没有作为根视图控制器嵌入到 NavigationController 中),则方向将是错误的。它在视觉上是正确的,但框架忽略了方向,并且边界在大多数情况下似乎是正确的。您什么时候希望框架忽略实际方向(如何呈现视图/gui)?!当然,我希望它就像我在设备上看到的一样!这使得自定义 segues 变得非常痛苦,因为,比如说,滑动动画在横向和纵向中看起来不一样......我在博客等中看到了多个示例。“解释”它是如何工作的,但没有一个真正起作用两个方向... 人们只是接受这种无稽之谈,还是只是我真正看到了它的问题?我像疯子一样在谷歌上搜索,没有人有一个有效的例子,所有这些都只是黑客和削减直到它“似乎工作”......

^愤怒:)

4

1 回答 1

0

好的,所以经过一番繁重的挖掘后,我想我可能会尽我所能为其他有同样头痛的人回答这个问题!

总结一下我读过的内容(以及我如何解释它,对 iOS 有点陌生):

基本上,使用单独的 View Controller 作为初始 VC 会将 View 直接放在主窗口下方,就像设备的屏幕实际上从未改变方向一样(屏幕的宽度和高度始终是相同的物理尺寸,无论方向如何) . 这就是为什么当您将相同的视图控制器作为根放在导航控制器中时它按预期工作的原因,因为导航视图现在将作为层次结构中所有其他视图的超级视图(正确地重新计算不同方向的变换)。

对我来说,这完全不明显,这造成了很大的混乱!我理所当然地认为这是由操作系统处理的,因为我无法想象斜轴什么时候会有用……但这只是我:) 无论如何,希望这至少对某些人有所帮助!

这是一个很好的解释: UIViewController 返回无效帧?

于 2013-11-09T21:32:51.767 回答