0

我的应用程序在我的 AppDelegate 的窗口中添加了一个 UITabBarController 的视图,该窗口显示了几个自定义 UIViewController 的视图。在我拥有的每个视图控制器中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return TRUE;
}

实现,以便应用程序随设备旋转。

在其中一个视图控制器上,我想对一些自定义子视图对象产生的触摸坐标和旋转后的触摸坐标进行比较,这些坐标位于视图控制器坐标的旋转坐标空间中。

所以我之前问了一个关于如何最好地实现这一点的问题,并建议我利用 viewController 的视图变换来使坐标进入相同的旋转。原则上听起来不错,但是当我开始使用它时,事情并没有按计划进行。所以我尝试放入一些 NSLogs 来找出可能的原因。

在我放置的视图控制器中:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    NSLog(@"VC Transform: %@", NSStringFromCGAffineOrientation(self.view.transform));
}

我发现即使屏幕明显在旋转,在每个方向上的输出都是 [1, 0, 0, 1, 0, 0] 。只是提一下,我并没有试图在我的代码中为其分配一些东西。

所以我尝试添加:

NSLog(@"AD Tansform: %@", NSStringFromCGAffineOrientation(mainDelegate.window.transform));

看看那里是否发生了更有趣的事情,但发现了相同的结果。我还尝试将它添加到我的其他视图控制器之一,该控制器在旋转后没有做任何工作,并发现了同样的事情。

谁能想到视图转换可能不会改变的原因?

4

1 回答 1

1

界面旋转不会修改窗口和视图的变换属性。该转换旨在由用户设置。

要查看界面如何旋转,您可以尝试:

[[UIDevice currentDevice] orientation]

并订阅接口方向通知,如这个答案:How to subscribe self on the event of Device Orientation(not interfaceorientation)?

于 2011-11-07T08:56:36.043 回答