关于iphone:CGAffineRotation偏斜图像照片

CGAffineRotation Skews Image Photos

我的iOS已通过NSNotificationCenter注册了设备方向更改通知,并具有响应不同方向更改的方法。将手机旋转到" landscape-left "时,将调用以下代码来更改视图的方向和位置。

1
2
3
4
5
6
7
8
9
10
11
12
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];
            }

我的方程式可以转换弧度和度数:

1
2
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)

视图正确旋转并在屏幕上采取正确的位置,但是图像的侧面突然被压扁,使图像看起来很凝结。仅当将手机旋转到横向位置(向左或向右)时,才会发生这种情况。使用基本相同的代码,上下颠倒或纵向旋转即可平移和旋转视图。是什么原因导致图像在横向位置出现这种倾斜?


在对其设置旋转变换之后,不应设置_cameraToggleButtonframe。要在设置旋转后重新放置_cameraToggleButton,应按如下所示更改它的center

1
_cameraToggleButton.center = CGPointMake(274, 350);

此外,正如其他人建议的那样,使用UIViewContentModeScaleAspectFit而不是UIViewContentModeScaleToFill