【问题标题】:View's transform not changing following device rotation视图的变换在设备旋转后不会改变
【发布时间】:2011-09-04 14:19:37
【问题描述】:

我的应用程序在我的 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));

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

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

【问题讨论】:

    标签: objective-c ios xcode rotation cgaffinetransform


    【解决方案1】:

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

    要查看界面是如何旋转的,可以试试:

    [[UIDevice currentDevice] orientation]
    

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

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2022-12-22
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多