我的iOS已通过NSNotificationCenter
注册了设备方向更改通知,并且具有响应不同方向更改的方法。 调用以下代码以在将手机旋转到"横向左侧"时更改视图的方向和位置。
camAngle = [(NSNumber *)[_cameraToggleButton valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
camDegrees = (RADIANS_TO_DEGREES(camAngle));
if (!(camDegrees == 90)) {
_cameraToggleButton.alpha = 0.0;
_cameraToggleButton.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90));
_cameraToggleButton.frame = CGRectMake(274, 350, 66, 54);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
_cameraToggleButton.alpha = 1.0;
[UIView commitAnimations];
}
以及我转换弧度和度数的方程:
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
视图正确旋转并在屏幕上假定正确的位置,但图像的侧面突然被压扁,使图像看起来很紧凑。 仅当将手机旋转到横向位置(左或右)时,才会发生这种情况。 旋转到上下颠倒或反向纵向可以很好地平移和旋转视图,代码基本相同。 什么会导致图像在横向位置出现这种倾斜?
_cameraToggleButton
上设置旋转变换后,不应设置frame
。要在设置旋转后重新定位_cameraToggleButton,应更改其center
,如下所示:
_cameraToggleButton.center = CGPointMake(274, 350);
另外,正如其他人建议的那样,使用 UIViewContentModeScaleAspectFit
而不是 UIViewContentModeScaleToFill
.