视图的变换不会改变设备的旋转方式

时间:2011-09-04 14:19:38

标签: objective-c ios xcode rotation cgaffinetransform

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

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

实施,以便应用程序随设备一起旋转。

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

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

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

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

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

所以我尝试添加:

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

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

有人能想到视图转换可能没有改变的原因吗?

1 个答案:

答案 0 :(得分:1)

接口旋转不会修改

Windows和视图的转换属性。该转换旨在由用户设置。

要查看界面的旋转方式,您可以尝试:

[[UIDevice currentDevice] orientation]

订阅界面方向通知,如以下答案:How to subscribe self on the event of Device Orientation(not interface orientation)?