UIView中心处于“错误的方向”

时间:2013-11-06 13:40:08

标签: ios cocoa-touch

我有一些真正的问题,理解为什么我的观点的中心表现得像它一样,完全抛弃设备的方向(我的其他好的谷歌技能什么都没有)...我理解框架,边界和中心是如何关联的彼此/超级视图等(here is a good explaination)。

所以,我有一些ViewControllers(称之为 A & B )。 B A “模态”呈现,使用“封面垂直” - 过渡(真的不相关,但谁知道......)。

现在,运行以下代码

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

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

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

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

所以,请指出显而易见的,并且以我的代价笑一笑! :)

修改

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

编辑2。

好的,所以当帧/边界返回时,似乎存在ZERO一致性。基本上,如果您有一个简单的ViewController作为初始控制器(例如,未在NavigationController中作为root-viewcontroller嵌入),则方向将是错误的。它在视觉上是正确的,但框架忽略了方向,并且边界似乎在大多数时间都是正确的。你什么时候想要框架忽略实际的方向(如何渲染视图/ gui)?!当然我希望它就像我在设备上看到它一样! 这使得自定义segues一个非常痛苦,因为,例如,滑动动画在风景和肖像中看起来不一样......我在博客等中看到了多个例子“解释”它是如何工作的,但没有一个实际上在这两个方向......人们只是接受这种无稽之谈,还是只是我实际上看到它的问题?我已经像疯子一样用Google搜索,没有人有一个有效的例子,只是黑客攻击和削减直到它“似乎工作”......

^愤怒:)

1 个答案:

答案 0 :(得分:0)

Okey,所以在经过一番繁重的挖掘之后,我想我可能会对其他同样头痛的人做出最好的回答!

总结一下我读过的内容(以及如何解释它,对iOS有些新鲜感):

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

对我来说这完全不明显,这引起了很大的困惑!我理所当然地认为这是由操作系统处理的,因为我无法想象什么时候有一个倾斜轴才有用......但那只是我:)不管怎样,希望这对至少有些人有帮助!

这是一个很好的解释: UIViewController returns invalid frame?

相关问题