2

编辑询问 Autolayout 在这种情况下是否有帮助?

如何让我的 UILabel 在屏幕上保持固定位置但仍然旋转?shouldAutorotateToInterfaceOrientation 返回 YES 并且标签旋转得很好,但是无论我如何在 Xcode 中设置支柱和弹簧,标签的位置都会发生变化。

第一张图片显示了我如何在情节提要中创建布局,其中包含四个单独的 UILabel。第二张图片显示了风景是如何出现的——不是我想要的。第三张图片显示了我希望风景的外观,每个数字的旋转动画都以数字本身为中心。

这就是我在情节提要中创建布局的方式,其中包含四个单独的 UILabel。 这就是风景出现的方式——不是我想要的。 这是我希望横向查看的内容,每个数字的旋转动画都以数字本身为中心。

4

4 回答 4

3

vrk 的答案是正确的,但shouldAutorotateToInterfaceOrientation:不是布置标签的正确方法。当您收到 时shouldAutorotateToInterfaceOrientation:,尚未针对新方向进行任何更新。

您应该在willAnimateRotationToInterfaceOrientation:duration:. 正如文档所述:

调用此方法时,该interfaceOrientation属性已设置为新方向,并且视图的边界已更改。因此,您可以在此方法中执行视图所需的任何其他布局。

您甚至可以用这种方法将您的视图动画化到它们的新位置。

于 2012-02-19T07:24:34.883 回答
2

您可以在标签上执行旋转(转换)。在 uiviewcontroller 中的 didrotatefrom interfaceorientation 方法上执行此操作。

uilabel.transform=CGAffineTransformMakeRotation(M_PI / -4); 像这样。在所有四个方向上执行此操作。一件事从appdelegate获取状态栏方向而不是设备方向。它将帮助您与视图方向保持同步。

于 2012-02-19T07:03:32.750 回答
1

您需要在 shouldAutorotateToInterfaceOrientation 方法中手动设置标签的框架位置值

于 2012-02-19T06:29:20.603 回答
1

创建两个 UILabel,一个是水平的,另一个是垂直的。更改方向时隐藏和显示所需的标签。为此,您必须放入 viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

并实施

- (void) didRotate:(NSNotification *)notification{

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
于 2012-02-19T09:01:34.157 回答