我有viewController
不应该自动旋转",而是手动旋转特定的GUI元素。原因是我使用前置摄像头拍照,并且我不希望旋转包含UIView
的{{1}}。
我的代码如下所示:
UIImageView
和
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self performSelector:@selector(refreshView) withObject:nil afterDelay:1.0];
return NO; // don't autorotate!
}
" labelPrize"标题是标题" 20 EURO"这可以在下面的屏幕截图中找到," prizeView"是它的容器。 prizeView是唯一具有约束定义的GUI元素,如下所示:
只是为了澄清,这里有" labelPrize" 的样子:
最后,这是应用程序产生的内容:
这不是我想达到的目标,我喜欢" prizeView" /" labelPrize"是
另外值得一提的是:我想在上面添加标签(标题)和下面的按钮("好的")我的" labelPrize"并在- (void) refreshView {
UIDeviceOrientation actualDeviceOrientation = [[UIDevice currentDevice] orientation];
float rotation = 0; // UIDeviceOrientationPortrait
if (actualDeviceOrientation == UIDeviceOrientationPortraitUpsideDown) rotation = 180;
else if (actualDeviceOrientation == UIDeviceOrientationLandscapeLeft) rotation = 90;
else if (actualDeviceOrientation == UIDeviceOrientationLandscapeRight) rotation = 270;
float rotationRadians = rotation * M_PI / 180;
[UIView animateWithDuration:0.4
animations:^(void) {
self.labelPrize.center = self.prizeView.center;
self.prizeView.transform = CGAffineTransformMakeRotation(rotationRadians);
} completion:^(BOOL finished){ }];
}
中旋转/定位它们。
感谢您的帮助!
答案 0 :(得分:1)
这里有两个大问题。我们一次拿一个。
<强>(1)强>
self.labelPrize.center = self.prizeView.center;
想一想。 labelPrize
是prizeView
的子视图。因此,就坐标系统而言,您正在将苹果与橙子混合:labelPrize.center
是根据prizeView.bounds
来衡量的,但prizeView.center
是相对于self.view.bounds
来衡量的。要将labelPrize
的中心保持在prizeView
的中心,请将其置于prizeView
边界的中点。 (但是,您根本不必移动它,因为变换会转换边界。)
<强>(2)强>
旋转视图变换和自动布局是致命的敌人,正如我解释here。这就是为什么旋转prizeView
的变换似乎也改变了它的位置。我的答案为您提供了几种可能的解决方法。