编辑以询问Autolayout在这种情况下是否有帮助?
如何让我的UILabel在屏幕上保持固定位置但仍然可以旋转? shouldAutorotateToInterfaceOrientation返回YES并且标签正好旋转,但无论我如何在Xcode中设置弹簧,弹簧标签的位置都会发生变化。
第一张图片展示了我如何在故事板中创建布局,其中包含四个单独的UILabel。 第二张图片展示了景观是如何出现的 - 而不是我想要的。 第三张图显示了我希望如何看待风景,每个数字的旋转动画都以数字本身为中心。
答案 0 :(得分:3)
vrk在他的回答的正确轨道上,但shouldAutorotateToInterfaceOrientation:
不是布置标签的正确方法。当您收到shouldAutorotateToInterfaceOrientation:
时,尚未针对新方向更新任何内容。
您应该在willAnimateRotationToInterfaceOrientation:duration:
中列出您的观点。正如the documentation所述:
调用此方法时,
interfaceOrientation
属性已设置为新方向,并且视图的边界已更改。因此,您可以在此方法中执行视图所需的任何其他布局。
您甚至可以在此方法中将您的观看动画到新的位置。
答案 1 :(得分:2)
您可以在标签上执行旋转(transformatin)。在uiviewcontroller中的didrotate来自interfaceorientation方法。
uilabel.transform = CGAffineTransformMakeRotation(M_PI / -4);像这样。在所有四个方向上执行此操作。除了设备方向之外,有一件事是从appdelegate获取状态栏方向。它将帮助您与视图方向保持同步。
答案 2 :(得分:1)
您需要在shouldAutorotateToInterfaceOrientation方法中手动设置标签的帧位置值
答案 3 :(得分: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
}
....
}